// $Id: javascript.js 2187 2009-09-18 03:50:09Z taras $

var openedArrayForms = new Array();
var closeParent = new Array();
var cached_images_started = 0;
var cached_images_pause = 0;
var cached_dest_images_started = 0;
var cached_dest_images_first_load = 0;

var uris = new Array();


var myBookmarks = new Array();
var myBookings = new Array();
var ajax_url = '/ajax.pl';
var active_action_request;

var jssm = new Array();
var jsts = new Array();

var action_threads = new Object;
action_threads.q1 = 0;
action_threads.q2 = 0;

var form_threads = new Object;
form_threads.q1 = 0;
form_threads.q2 = 0;

var current_item_in_wc; // Current thing in working space (member's area)
var current_object;
//current_full_object;
var CFO;
var current_class;




var x = 80;
var y = 80;

var ss_to;
var ss_to2;


var faq_my_open_answer = '';


function createList (result, att, parentWindow){
  var obj = result.obj;

 //alert("Create list. Open arrays att: " + att + "\n New Window ID: " + result.openWinID + "\n Parent: " + parentWindow);
  openedArrayForms[att] = result.openWinID;
  closeParent['d'+result.openWinID] = parentWindow;

  var div1=ce('DIV');
  div1.innerHTML = result.form;

  document.body.appendChild(div1);
  init();
}


function createForm (result, att){
  var form = result.form;
  var id = result.id;
  
  openedArrayForms[att] = id;
  
  var div1=ce('DIV');
  div1.innerHTML = form;

  div1.id = 'd'+id+'_child';
  div1.style.backgroundColor='white';
  var div1id = '"'+div1.id+'"';
  document.body.appendChild(div1);
  if(result.obj){
 	 fillForm(result.obj,att);
  }
  else {
  	init();
  }
  

}

function attachFormToAttic (result) {
	
	var html_frm = result.form;
	var id = result.id;
	var frm = ge(id);
	if (frm && !result.resetting){
	} else {
		zap_if(frm);
		var attic = ge('attic');
		attic.innerHTML += html_frm;
		unify_table(id+"_tab");
	  	rows = getElementsByAttribute(ge(id), 'level', '0','td');
		for (var r in rows){
			if(rows[r].className == ''){
				rows[r].className = 'nested_form';
			}
		}
	}

}

function selfAttachExternalForm (frm_id) {

	if (frm_id == current_page_ext_form['id']) {
		
		var where = current_page_ext_form['target'];
		if (!where) {
			where = 'external_form';
		}
		var ef_td = ge(where);
		if (ef_td){
				var t = ge('attic');
				t.appendChild(ef_td.firstChild);
				ef_td.innerHTML = '';

			}
		var frm = ge(frm_id);
		ef_td.appendChild(frm);
		
		// Fix for member's area only: to insert form into div with class
		if(current_page_ext_form['member'] == 1){
		
			var c = ge(frm_id);
			var cl = ce('div');
			cl.className = 'm_details';
			cl.appendChild(c);
			ef_td.appendChild(cl);
			if(current_page_ext_form['form_data']){
				fillForm(current_page_ext_form['form_data'],frm_id);
			}
		}
		
		current_page_ext_form = new Array();
		
		//FIXME: Yep, this is big hack to hide unwanted fields

		hideUnwantedFields(frm_id);		
		init_edit();	
	
	}
	

}

function loadJSON (url, mode, att, parentWindow){

  	var req;
	if (window.XMLHttpRequest) {
		req = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		req = new ActiveXObject("Microsoft.XMLHTTP");
	}

	if (req){
	
	   req.onreadystatechange = function () {
		  if (req.readyState == 4) {
		    if (req.status == 200) {
		      ge('indicator').style.display='none';
		      var result = "var result = " + req.responseText;
					eval(result);
//					if (result.date){
						set_now_at_server_broken();
//					}
					if(mode == 'form'){
						attachFormToAttic(result);
						json_forms[att] = 1;

						
					} else if (mode == 'getForm'){
						createForm(result, att);
						if(result.obj.object_id) {
							
							if(att == 'Faq' || att == 'FAQSection' || att == 'SundryTemplateItem'){
								var del = ge('del_button');
								del.onclick = function () { 
									if(!confirm('Are you sure you would like to delete this record?')) {
										return false;
									}
									var url = '/ajax.pl?id='+result.obj.object_id+'&w=admin_delete&clas='+att;
									loadJSON(url, 'admin_delete', att);
								}
								del.style.display = '';
							} else {
								ge('del_button').style.display = 'none';
							}
						} else {
							resetForm(att);
							ge('del_button').style.display = 'none';
						}
					} else if (mode == 'getArrayForm'){
						createList(result, att, parentWindow);
					} else if (mode == 'admin_delete'){
						
						window.location = '/protected/admin.pl?Otype='+ge('jsotype').value;

						
					}	else if(mode == 'fillForm'){

		      	var obj = result.obj;
						//attachForm(att);
						fillForm(obj, att);

						var del = ge('del_button');
					
						if(att == 'Faq' || att == 'FAQSection'){
							del.onclick = function () { 
								if(!confirm('Are you sure you would like to delete this record!?')) {
									return false;
								}							
								var url = '/ajax.pl?id='+obj.object_id+'&w=admin_delete&clas='+att;
								loadJSON(url, 'admin_delete', att);
								}
							del.style.display = '';
						} else {
							del.style.display = 'none';
						}
					} else {
						alert('LoadJSON: MODE is incorrect\\n');
					}

					delete result;
					killMessage();
					
					if(mode == 'form'){
						form_threads--;
					}
					else {
						action_threads--;
					}
					
		    	} else {
					alert('There was a problem retrieving the object:\\n' + req.statusText);
				}
			}
			//else alert('still waiting '+att+' ' +json_forms[att]);   
    
    	};
    	
    	try {
    		req.open("GET", url, true);
    	}
    	catch (e) {
    		debug(req);
	    	debug(e.message);
    	}
    	req.send(null);
	}
}


function loadR (r){

	// Hack for IE using Ajax
	var timestamp = '';
	if(document.all){
		var now = new Date();
		timestamp = '&timestamp=' + now.getTime();
	}
	
	var url = ajax_url+'?D='+r.q+'&class='+r.clas+'&'+r.params + timestamp;

	var mode;
	var att = r.clas;
	// TODO: make this cleaner.
	if (r.typ == 'form'){
		mode = 'form';
	} else if (r.typ == 'data'){
		mode = 'fillForm';
	} else if (r.typ == 'post'){
		mode = 'post';
	} else if (r.typ == 'menu'){
		mode = 'menu';
	} else if (r.typ == 'list'){
		mode = 'list';
	} else if (r.typ == 'things_to_do'){
		mode = 'bm';
	} else if (r.typ == 'availability'){
		mode = 'bm';
	} else if (r.typ == 'prinfo'){
		mode = 'bm';
	} else if (r.typ == 'search'){
		mode = 'search';
	} else if (r.typ == 'manage_fav'){
		mode = 'manage_fav';
	} else if (r.typ == 'getBookmarks'){
		mode = 'bm';
	} else if (r.typ == 'getBookings'){
		mode = 'bm';		
	} else if (r.typ == 'member_wishlist'){
		mode = 'bm';
	} else if (r.typ == 'requester'){
		mode = 'mm';
	} else if (r.typ == 'Rone'){
		mode = 'mm1';
	} else {
		alert('Unknown mode in loadR: ' + mode + '; r.typ was: '+r.typ);
	}

	if (window.XMLHttpRequest) {
		r.req = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		r.req = new ActiveXObject("Microsoft.XMLHTTP");
	}

	if (r.req){

	   r.req.onreadystatechange = function () {
	   
		  if (r.req.readyState == 4) {
		  	if(r.aborted){
			// FIXME:: what about aborted form threads???
		  	 action_threads[r.q]--;
		  	 active_action_request = null;
		  	 return;
		  	}
		  	
		    if (r.req.status == 200) {
				var result = "var result = " + r.req.responseText;
				eval(result);
				if (result.fatal){
					alert(result.error_text);
				 	delete result;
					killMessage();
					active_action_request = null;
					if(mode == 'form'){
						form_threads[r.q]--;
					} else if (mode == 'post'){
						action_threads[r.q]--;
					} else {
						action_threads[r.q]--;
					}
					return;
				}
				if (result.expired){
					alert('Your session has expired. You will be logged out and redirected to the home page.');
					window.location = '/';
				}
				var robj;
				var list;

			  if(result.obj){
			  		robj = result.obj;
			  }
			  if(result.list){
			   		list = result.list;
			   }		


				if(mode == 'form'){
					attachFormToAttic(result);
					selfAttachExternalForm (result.id);
					json_forms[att] = 1;
				} else if (mode == 'getForm') {
					createForm(result, att);
				} else if (mode == 'getArrayForm'){
					alert('I dont think we use it. Javascript. LoadR');
					//createList(result, att, parentWindow);
				} else if (mode == 'fillForm'){
					var obj = result.obj;
					current_object = obj.object_id;
					CFO = obj;
//					if (!CM.object_id && !CC.object_id){
//						if (obj.uri){
//							window.location.href = "#"+obj.uri;
//						} else {
//							window.location.href = "#";
//						}
//					}
					eval(result.before_fill);
					attachForm(att);
					fillForm(obj, att);
					eval(result.after_fill);
					current_class = att;
						
					if(att == 'Propaganda'){
						propaganda_minimenu(result.obj.subsection.en);
					}
				
					google_stats();
					window.scrollTo(0,0);
						
				} else if(mode == 'post'){
					if(CM.object_id || CC.object_id || CA.object_id || SA.object_id || SS.object_id || JJ.object_id) {

						var btn = ge(result.clas + '_submit_button');

						if(btn) {
							btn.value = jssm['General']['update_button'];
						}

						if(result.extra_form_param) {
							
							if(result.extra_form_param == 'booking_details') {

								//FIXME Hack on relationship.is_immediate.yn for Booking's page
								if(result.is_immediate) {
									T['booking_is_immediate'] = result.is_immediate;
								}
								memberAfterPostBooking(r.form,result.object_id);

							} else if (result.extra_form_param == 'my_details') {
								memberAfterPostPeople(r.form,result);

							} else if (result.extra_form_param == 'message') {

								if (result.event) {
									member_event_added(r.form,result.event);
								}

								var t = ge('member_msgs_message');
								t.innerHTML = 'Message has been sent';
								setTimeout("ge('member_msgs_message').innerHTML = ''",5000);
								messages_action('home');

								var o = formToArray(r.form);
								
								if(o['Messages::inreplyto']) {
									message_remove_from_list(o['Messages::inreplyto']);								
								}

								if(T['member_messages_current_folder'] == 'outbox') {
									if(ge('Messages_list')) {
										ge('Messages_list').innerHTML = 'Loading...';
									}
									if(T['message_control'] == 'm_ws') {
										requester('messages','&target=m_ws&folder=outbox');
									} else if (T['message_control'] == 'the_bmsgs') {
										requester('messages','&target=member_msgs_list&bid='+T['booking'].booking.object_id+'&folder=outbox');
									} else if(T['message_control'] == 'the_history_content') {
										requester('messages','&target=member_msgs_list&month='+T['history_cur_month']+'&folder=outbox');
									}
								}

							} else if (result.extra_form_param == 'expense') {
									con_expenses();																	
//								memberAfterPostPeople(r.form,result);

							} else if (result.extra_form_param == 'supplier') {

								memberAfterPostPeople(r.form,result);

							} else if (result.extra_form_param == 'supplier_from_expense') {
								
								memberAfterPostSupplier(r.form,result);
	
							} else if (result.extra_form_param == 'guest_from_booking') {
								
								memberAfterPostGuest(r.form,result);
	
							} else if (result.extra_form_param == 'nmember') {

								memberAfterPostPeople(r.form,result);

							} else if (result.extra_form_param == 'todo_home') {

								conAfterTodo(r.form,result);
								if(ge('container').firstChild.id == 'the_bookings_place') {
									if(result.event_updated) {
										member_update_event(r.form);
									} else {
										member_event_added(r.form,result.object_id);
									}
								}

							} else if (result.extra_form_param == 'manage_todo') {

								conAfterThingsToDo('ttd');

							} else if (result.extra_form_param == 'con_sundry') {

								requester('sundry_template','&did='+CC.destination.object_id);

							} else if (result.extra_form_param == 'manage_todo_1') {

								conAfterThingsToDo('pi');
		
							} else if (result.extra_form_param == 'con_sch') {

								CFO.schedule = result.schedule;
								con_schedule();
								
							}
						} else {
							if (result.event_updated) {
								member_update_event(r.form);
							}
						}	

	    			}

						eval(result.js+'('+result.data+')');
						if (ge(r.clas+ '_submit_button')){
							ge(r.clas+ '_submit_button').disabled = result.sbutton_d;
						}
			   	} else if(mode == 'menu'){
						eval(result.js+"('"+result.data+"')");
			   	} else if(mode == 'manage_fav'){
						eval(result.js);
			  	} else if(mode == 'bm'){
						eval(result.js);
			   	} else if(mode == 'mm'){

						if(list && result.add_new_button){
							list = '<div class="'+result.add_new_button_class+'">'+result.add_new_button + list+'</div>';
						}
						if (result.data){
							eval('var rob='+result.data);
						}
						eval(result.js);
						set_now_at_server(result.date);
				
			   	} else if(mode == 'mm1'){

						if(list && result.add_new_button){
							list = '<div class="'+result.add_new_button_class+'">'+result.add_new_button + list+'</div>';
						}

			   			eval(result.js);
						set_now_at_server(result.date);
				
			   	} else if(mode == 'search'){
						eval(result.js+"('"+result.data+"','"+result.tabid+"')");
						var submit_button = ge('search_submit_button');
						ge('search_all_submit_button').disabled = false;
						submit_button.disabled = false;
						submit_button.value = jssm['search']['search_button_t'];
						
				} else if(mode == 'list'){
					eval(result.js+"('"+result.data+"','"+result.tabid+"')");
				} else {
					alert('LoadJSON: MODE is incorrect\\n');
				}
			      	
			 	delete result;
				killMessage();
				active_action_request = null;
				if(mode == 'form'){
					form_threads[r.q]--;
				} else if (mode == 'post'){
					action_threads[r.q]--;
				} else {
					action_threads[r.q]--;
				}
//				AJAX_NAV=0;
		  } else {
					alert('There was a problem retrieving the object:\n' + r.req.statusText);
			}
		}
    
  };
    	
	var send_param;
    	try {
		if(r.typ == 'post'){
	    		r.req.open("POST", ajax_url, true);
	    		r.req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
	    		send_param = r.params;
	    	}
	    	else {
	    		r.req.open("GET", url, true);
	    	}
    	}
    	catch (e) {
    		debug(r.req);
	    	debug(url);
    	}
    	r.req.send(send_param);
	}
}


function replace_menu (data){
	var c = ge('cont');
	if (c){
		c.innerHTML = data;
		listMenu.activateMenu("listMenuRoot",arrow);
	} else {
		alert('system integrity violation. application is unusable.');
	}
//	alert(data);

}

function attach_list (data, tabid){

	zap_if(ge(tabid + '_list'));
	zap_if(ge('external_extra'));
	var ext = ge('external_form');
  var elem = ce("div");
  ext.appendChild(elem);	
  elem.innerHTML = data;
  elem.id='external_extra';

}


// request member's data
function momo (obj_id, clas, where){
	var message = new Message();
	var r = new Object;
	r.typ = 'data';
	r.params = 'id='+obj_id+'&w=g&t='+where;
	r.clas = clas;
	r.aborted = false;
	action_requests.push(r);
	return false;

}


// request data
function yoyo (obj_id, clas){
	AJAX_NAV=1;
	var message = new Message();
	var r = new Object;
	r.typ = 'data';
	r.params = 'id='+obj_id+'&w=g';
	r.clas = clas;
	r.aborted = false;
	action_requests.push(r);
	return false;
}


function lolo (obj_id, clas,req){

  	rows = getElementsByAttribute(ge(clas+'_list'), 'att', 'list_link','li');
	for (var r = 0; rows.length > r; r++){
		rows[r].setAttribute('style','font-weight:normal;'); 
	}

	var list_link = ge(obj_id + '_list');
	list_link.setAttribute('style','font-weight:bold;');
	//list_link.innerHTML = list_link.firstChild.innerHTML;
	
	
	var cl_ls = ge(req + '_list');
	if(cl_ls) {

		cl_ls.innerHTML = jssm['lolo']['loading_title'];
	}
	else {
		var cl_ls = ge(clas+'_list');
		var elem = ce("div");
		elem.className = 'attached_list';
	    elem.id = req+'_list';
	  
	    elem.innerHTML += jssm['lolo']['loading_title'];
	    cl_ls.parentNode.appendChild(elem);

	}
	var r = new Object;
	r.typ = 'list';
	r.params = 'id='+obj_id+'&w=list&req='+req;
	r.clas = clas;
	r.aborted = false;
	action_requests.push(r);
	return false;
}

function submitRequest(form, clas, doing) {
	var validate = 1;

	if(doing == 'forg_pass') {
		validate = 0;
		ge('forg_pass_b').disabled = true;

	} else if(doing == 'delete') {
		validate = 0;
		ge(clas+'_delete_button').disabled = true;
	}	
	
	if(clas == 'InfoRequest') {
		if(doing){
			if(validate == 1 && !validateForm('Propaganda',doing)){
				return false;
			}
		}
	} else if (clas == 'TellAFriend') {
		if(doing){
			if(validate == 1 && !validateForm('Propaganda',doing)){
				return false;
			}
		}
	} else {
		if(validate == 1 && !validateForm(clas)){
			T['send_form'] = false;
			return false;
		}
	}

	if (!doing){
		doing = 'db_save';
	}

	if(clas == 'InfoRequest') {
		var str = 'form=InfoRequest&doing=db_save&w=submit&' + getFormValues(form, 'submit');
	} else if(clas == 'TellAFriend') {
		var str = 'form=TellAFriend&doing=db_save&w=submit&' + getFormValues(form, 'submit');
	} else {
		var str = 'form='+clas+'&doing='+doing+'&w=submit&' + getFormValues(form, 'submit');
	}


	var message = new Message();

	var r = new Object;
	r.form = form;
	r.typ = 'post';
	r.params = str;
	r.clas = clas;

	var submit_button = ge(clas+ '_submit_button');
	if(!submit_button) {
		alert('Hm...there is no submit button');
		return false;
	} else {
		if(CM.object_id) {
			if(clas == 'Messages') {
				submit_button.value = 'Sending...';
			} else {
				submit_button.value = jssm['Member']['saving'];
			}
		} else if (JJ.object_id){
			submit_button.value = 'Sending your data... This can take a while...';
		}
		submit_button.disabled = true;
		if(ge(clas+'_delete_button')) {
			ge(clas+'_delete_button').disabled = true;
		}
	}

	if(typeof(active_action_request) == 'object'){
		if(active_action_request.typ == 'post') {
			alert('Please wait while submiting form');
			return false;
		}
		active_action_request.aborted = true;
		active_action_request.req.abort();
	}
	action_requests = new Array();
	action_requests.push(r);
	if (form.id == 'WebAuth'){
//		google_stats('login');
	} else {
		google_stats('submited');
	}
	T['send_form'] = true;

	return false;
	
}


function pred(r, clear){
	var w;
	if (clear){
		w = '';
	} else {
		w = '1px solid red';
	}
//	if (r.firstChild){
//		r.firstChild.style.border = w;
//	}
}


function validateForm (id,hack) {

	var rows = getElementsByAttribute(document, 'control', 'hide_on_init', 'input');
	for (var r = 0; rows.length > r; r++ ){
		if(rows[r].style.display == 'block'){
			//FIXME Just ignoring Select value if "Other Selected" on Submit. Not very good solution
			rows[r].previousSibling.name = 'ignore';
		}
	}

  var f = document.forms[id];
  if(!f){
  	return false;
  }
  
  
  //FIXME Hack on InfoRequest - Confirm Email

  var message='';

 if(hack == 1) {
  
		if(ge('InfoRequest::email::email').value != ge('InfoRequest::email::email_confirm').value) {
			alert('Please make sure you have entered correct email address');
			return false;
		}

		if(ge('IC_addr').style.display != 'none' 
				&& ((ge('ri_pobox').firstChild.value == '' && (ge('ri_add1').value == '' || ge('ri_add2').value == ''))
				|| (ge('ri_pobox').firstChild.value == '' && (ge('ri_add1').value == '' && ge('ri_add2').value == '')))) {
			message += 'Enter PO Box or Address\n';
		}
  
  }


	for(var i = 0; i < f.elements.length; i++){
		var el = f.elements[i];
		var td = el.parentNode;
		var row = td.parentNode;
		pred(row, 1);		

		if(td.parentNode.style.display == 'none') {
			continue;
		}
		if (el.style.display == 'none'){continue;}

		if (td.getAttribute('nullable') == 'N'){
			if (f.elements[i].value == '' || f.elements[i].value.length == 0){

				if(td.getAttribute('err')) {
					message += jssm['validation']['mandatory_title'] + ' ' + td.getAttribute('err') + '\n';
					pred(row);

				} else {
					var prevtd = td.previousSibling;

					var t = '';
					if(td.previousSibling.nodeName == 'TD') {
						prevtd = td.previousSibling;
						t = prevtd.innerHTML;

					} else {

						if(prevtd.nodeName == '#text'){
							prevtd = prevtd.previousSibling;
						}
						t = prevtd.firstChild.nodeValue;
					}
					t = t.replace(/\n/g," ");
					t = t.replace(/<b>/g,"");
					t = t.replace(/<\/b>/g,"");
					t = '"' + t + '"';
					message = message.replace(jssm['validation']['mandatory_title'] + ' ' + t + '\n',"");
					message += jssm['validation']['mandatory_title'] + ' ' + t + '\n';
					pred(row);
	
				}
	
			}
		}
		if (f.elements[i].type == 'text' && ((td.getAttribute('numeric') == 'Y' || el.getAttribute('numeric')) && f.elements[i].value.length>0)){
			if(!IsNumeric(f.elements[i].value)){
				if(td.getAttribute('err')) {
					message += 'Please enter valid numeric value ' + td.getAttribute('err') + '\n';
					pred(row);
				} else {
					if(row && row.firstChild) {
						var fname;
						if(document.all) {
							fname = row.firstChild.innerHTML;
						} else {
							fname = row.firstChild.nextSibling.innerHTML;
						}

						if(fname != '' ) {
							fname = 'for ' + fname;
						}
						message += 'Please enter valid numeric value ' + fname;
						pred(row);
					} else {
						message += 'Not '+ jssm['validation']['numeric_title'] + '. Value: ' + f.elements[i].value + '\n';
						pred(row);
					}
				}
			}
		}

		if (el.getAttribute('date') == 'Y' && el.value!=''){
			var arr = el.value.split('-');
			var month = parseInt(arr[1]);
			var day = parseInt(arr[0]);
			var year = parseInt(arr[2]);
			if(day > days_in_month(year,month-1)) {
				message += 'Invalid Date. Value: ' + day + '/'+month+'/'+year+'\n';
				pred(row);
			}
		}
		if (td.getAttribute('dt') == 'Email' && !(el.value == '')){
			if (!isValidEmail(el.value)){
				message += 'Invalid email address\n';
				pred(row);
			}
		}
	}

	if (message != ''){
		alert('There were errors in the form: \n' + message);
		return false;
	}
	return true;

}

function isValidEmail (str){

		var at="@";
		var dot=".";
		var lat=str.indexOf(at);
		var lstr=str.length;
		var ldot=str.indexOf(dot);
		if (str.indexOf(at)==-1){
		   return false;
		}

		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
		   return false;
		}

		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		    return false;
		}

		 if (str.indexOf(at,(lat+1))!=-1){
		    return false;
		 }

		 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		    return false;
		 }

		 if (str.indexOf(dot,(lat+2))==-1){
		    return false;
		 }
		
		 if (str.indexOf(" ")!=-1){
		    return false;
		 }

 		 return true;

}

function getFormValues(fobj, mode) { 

   var sorted = new Array();
   var str = "";
   
	for(var i = 0;i < fobj.elements.length;i++) { 
		var tmp = fobj.elements[i];
		sorted.push(tmp);
	}
	
	//sorted.sort();

   for(var i = 0;i < sorted.length;i++) { 
	  
       switch(sorted[i].type) { 
           case "text":
                str += sorted[i].name + "=" + escape(sorted[i].value) + "&"; 
                break;
           case "password":
                str += sorted[i].name + "=" + escape(sorted[i].value) + "&"; 
                break;
           case "textarea": 
                str += sorted[i].name + "=" + escape(sorted[i].value) + "&"; 
                break;                
           case "select-one":
           		if(sorted[i].name && sorted[i].selectedIndex != -1) {
                		str += sorted[i].name + "=" + sorted[i].options[sorted[i].selectedIndex].value + "&"; 
                }
                break;
           case "hidden": 
                str += sorted[i].name + "=" + escape(sorted[i].value) + "&"; 
                break;                 
           case "select-multiple": 
           		for(var ii = 0;ii < sorted[i].options.length;ii++) {
                	if(sorted[i].options[ii].selected){
	                	str += sorted[i].name + "=" + sorted[i].options[ii].value + "&"; 
                	}
                }
                break; 
           case "radio": 
           		if(sorted[i].checked) {
           			ch_or_rd = 1;
                	str += sorted[i].name + "=" + sorted[i].value + "&"; 
                }
                break;
           case "checkbox": 
           		if(sorted[i].checked) {
                	str += sorted[i].name + "=" + sorted[i].value + "&"; 
                }
                break;                               

       	} 
		       	
   } 

   str = str.substr(0,(str.length - 1)); 

	if(mode == 'cond' && str.length > 0) {
		str = prep(str);

	}

   return str; 

}


function prep (str) {

	var m = new Array();
	var nstr = '{';
	var open = 0;
	
	// Check if serch criteria is selected in memebr's area.
	var memberdate = 0;
	
	m = str.split('&');
	for(var i = 0;i < m.length;i++) { 
		
		var temp = m[i].split('=');
		//FIXME: Not sure..do we ever need Propaganda's oject_id?
		//if(!CM.object_id && temp[0] == 'Propaganda::object_id' ) {
		if(temp[0] == 'Propaganda::object_id' ) {

		
			continue;
		}		
		
		if(i>1 && open == 1){
			var t1 = m[i].split('=');
			var t2 = m[i-1].split('=');
			if(t1[0] != t2[0]){
				if (nstr.length - 1 > 0){
					nstr = nstr.substr(0,(nstr.length - 1));
				}
				nstr += "],";
				open = 0;		
			}
		}
		
		var tt = m[i].split('=');
		if(tt[0] != 'mstart' && tt[0] != 'mend' && tt[0]!='range_type') {
			memberdate = 1;
		}

		
		if(open==0) {
			nstr += '"' +tt[0]+ '":';
		}

		if(i+1 < m.length && open==0){
			var t1 = m[i].split('=');
			var t2 = m[i+1].split('=');
			if(t1[0] == t2[0]){

				nstr += "[";
				open = 1;			
			}
		}
		
		nstr += '"'+tt[1]+'"' + ",";

	}

	var len = nstr.length-1;

	if(nstr.charAt(len) == ','){
		nstr= nstr.substr(0,(nstr.length - 1)); 
	}
	if(open == 1) {
		nstr += "]";
	}

	nstr += "}";

	if(memberdate == 0) {
		return false;
	} else {
		return nstr;
	}
}


function switchLang(lang) {

	SetCookie ('lang',lang,20);
	gini();
	return false;
	
}

function switchMode(value) {
	SetCookie ('mode',value,20);
	window.location = location.href;
	return false;
	
}




function toggleDrags(id, on) {


	var step = 24;


	if(closeParent[id] && on == 1){
		toggleDrags(closeParent[id], 0);
		closeParent[id] = false;
	}
	
	var t = ge(id);
	

	var tab = ge(id + '_tab');
	var body = ge(id + '_body');
	
	if(tab.className == 'transparent'){
		body.style.display = 'block';
		tab.className = '';
		level=0;
		
		
	}
	else if (t.style.display == 'none'){
		t.style.display='block';
	
	}
	else {
		if(on == 1){
			  x-= step;
			  y-= step;			
			t.style.display='none';
			}
		else {
			  x+= step;
  			  y+= step;
			body.style.display = 'none';
			tab.className = 'transparent';
		}
		
		}
	
	
}

function new_cdd(value,form,id) {
	var elId = form +'_'+ id;
	var f = ge(form +'_'+ id);
	var elExists = ge(elId + 'cdd');
	
	//FIXME: Hardcoded! Should be multi language
	if(value == 'Other' && !elExists){
	
		var elem = ce("INPUT");
		elem.type = 'text';
		// Not sure if its going to overwrite the previous select
		elem.name = id;
		elem.setAttribute('control','hide_on_init');
		elem.setAttribute('style','float:left;');
		elem.style.display = 'block';	
		elem.id = elId + 'cdd';
		elem.value = '';
		f.appendChild(elem);
	}
	else if (value == 'Other' && elExists) {

		elExists.style.display = 'block';


	}
	else if (value != 'Other' && elExists) {
		elExists.style.display = 'none';	
	}
	
}






function isNumeric(mynum){
	return IsNumeric(mynum);
}

function isInteger(mynum){
	if (mynum == parseInt(mynum)){
		return true;
	}
	return false;
}

function isPositiveInteger(mynum){
	if (mynum == parseInt(mynum)){
		if (mynum > 0){
			return true;
		}
	}
	return false;
}

function IsNumeric(mynum) {
	if (mynum == parseFloat(mynum)){
		return true;
	}
	return false;
}


function processRequests(){

	if(!(window.loadR1 && window.loadR2 && window.loadR3 && window.loadR4)) {
		setTimeout("processRequests()",100);
		return false;
	}

	for (var q in action_threads) {
		if(action_threads[q] < 1) {

			var r = action_requests.pop();
			active_action_request = r;
			
			if(r){
				action_threads[q]++;
				r.q = q;
				if(q == 'q1') {			
					loadR1(r);
				} else if(q == 'q2') {
					loadR2(r);
				} 
			}
		}
	}

	for (var q in form_threads) {
	
		if(form_threads[q] < 1){
			var r = form_requests.pop();
			if(r){
				if (json_forms[r.clas] == 0) {
					json_forms[r.clas] = new Date;
					json_forms['q_'+r.clas] = r.q;
					form_threads[q]++;
					r.q = q;
					if(q == 'q1') {			
						loadR3(r);
					} else if(q == 'q2') {
						loadR4(r);
					} 
				}
			}
		}
	}
	
	setTimeout("processRequests()",200);

}



function next_cached_image () {

	if(getCookie('images_loaded')){
		cim = new Array();
		return;
	}
	if (form_requests.length > 0) {
		cached_images_started = 0;
		setTimeout("next_cached_image()",500);
	}
	else {
	
		if (action_requests > 0) {
			cached_images_started = 0;
			return;
			
		}
		
		cached_images_started = 1;
		
		var tmp;
		if (cim.length > 0){
			tmp = cim.pop();
		}
		if (tmp) {
			var el = ge('cii');
			el.src = tmp;
		} else {		
			SetCookie ('images_loaded',1, 365*5);
		}
	}


}

function next_cached_dest_image () {
return;
	if(cached_dest_images_first_load == 0) {
		cached_dest_images_first_load = 1;
		return;
	}

	var where = location.href.split('#');
	var dest = where[1];

	if(getCookie('images_loaded_'+dest)){
		cimd[dest] = new Array();
		return;
	}

	//|| form_threads == 1 Removed since multi-threads introduced. Shouldn't be an issue
	if (form_requests.length > 0 ) {
		cached_dest_images_started = 0;
		setTimeout("next_cached_dest_image()",500);
	}
	else {

		if (action_requests >0 || !cimd[dest]) {
			cached_dest_images_started = 0;
			return;
			
		}
		cached_images_pause = 1;
		cached_dest_images_started = 1;
		var tmp;
		if (cimd[dest].length > 0){
			tmp = cimd[dest].pop();
		}
		if (tmp) {
			var el = ge('ciiD');
			el.src = tmp;
		} else {
			cached_images_pause = 0;
			SetCookie ('images_loaded_'+dest,1,365*5);
		}
	}


}


function checkFormArrived (frm_id) {
	
	try_count[frm_id] ++;
	if(try_count[frm_id] > 200) {
		//Might be wrong here since multu threads introduced
		form_threads[json_forms['q_'+frm_id]]--;
		t = confirm('Cant retrieve form. Wait or cancel?');
		if (t){
			form_requests.push(frm_id);
			try_count[frm_id] = 0;
			checkFormArrived(frm_id);	
		}

		return;

	}	
	
	if(json_forms[frm_id] == 1){

		var ef_td = ge('external_form');
		if (ef_td){
				ge('attic').appendChild(ef_td.firstChild);
		}
		ef_td.appendChild(ge(frm_id));

		return;
	}
	
	setTimeout("checkFormArrived('"+frm_id+"')", 200);
}

function debug (msg) {
	ge('indicator').style.display='block';
	ge('indicator').innerHTML += msg+'<br/>';

}


function explain( thedivid ) {
	var otherlist = getElementsByClass( ge('container'), 'exp-show', 'div');
	for ( var i = 0; i < otherlist.length; i++ )
	{
		replaceClass( otherlist[i], 'exp-show', 'exp-noshow' );
	}
	var thediv = ge( thedivid );
	replaceClass( thediv, 'exp-noshow', 'exp-show' );
	if ( document.recalc )
	{
		document.recalc();
	}
	return false;
}

function replaceClass( o, ocls, ncls ){
	var SEP = '(^|$| )';
	var regex = new RegExp( SEP + ocls + SEP );
	o.className = o.className.replace( regex, ' ' + ncls + ' ' );
}

function switchLangFront (lang) {

//	document.sw_ln.set_lang.value = lang;
	switchLang(lang);
	var l = (window.location.pathname.split('/'))[1];
	var p = (window.location.pathname.split('/'))[2];
	var f = (window.location.pathname.split('/'))[3];
	if (!p){p='info';}
	if (!f){f='home.html';}
	var np = '/'+lang+'/'+p+'/'+f;
	window.location=np;
	return false;


}


function dodo (zz) {
	yoyo(zz,'Destination');

}




function toggleAllRegions() {

	var data = search_countries_id;
	var dreg = search_countries_reg;
	var names = search_countries_name;
	var regions = search_regions;

	var cbs = ge( 'allRegions' );
	var current = 0;
	var check_for_checked = 0;
	var check_all = 0;
	for ( var ix = 0; ix < regions.length; ix++ )
	{
		var currentbox = ge('srch_'+ regions[ix] );
		if(currentbox.checked){
			check_for_checked = 1;
			
		}
	}
	if(check_for_checked==0){
		check_all = 1;
	}
	
	for ( var ixx = 0; ixx < dreg.length; ixx++)
	{

		for ( var ix = 0; ix < regions.length; ix++ ) {
			var currentbox = ge('srch_'+ regions[ix] );
			if((currentbox.checked || check_all==1)){
				if(dreg[ixx] == regions[ix]){
					cbs.options[current] = new Option(names[ixx],data[ixx]);
					current ++;
				}
			
			}	
		}
	
	}	

	cbs.length = current;

}

function get_search_results_all (form, target){

	for(var i = 0;i < form.length;i++) { 
	  
       	switch(form[i].type) { 
			case "checkbox": 
				form[i].checked = true;
	              	break;
		} 
	}	

	return get_search_results (form, target);

}


function get_search_results (form, target){
	
	var range;


	if(CM.object_id || CA.object_id) {
		if(form.elements['range_type'][0].checked) {
			range = form.elements['range_type'][0].value;
		} else if (form.elements['range_type'][1].checked) {
			range = form.elements['range_type'][1].value;
		} else if (form.elements['range_type'][2].checked) {
			range = form.elements['range_type'][2].value;
		}
		if(!checkDate(form.elements['mstart'].value, form.elements['mend'].value, range)){
			return false;
		}
	}
	var clas = 'Destination';
	var ev = getFormValues(form, 'cond');
	var str = 'req='+clas+'&w=search&params=' + ev;

	if(ev) {
		
		if(!target){
			target = 'search_form';
		}
	
		var message = new Message();
		var cl_ls = ge(clas + '_list');
		if(cl_ls) {
			cl_ls.innerHTML = '';
		}
		
		var submit_button = ge('search_submit_button');
		submit_button.disabled = true;
		submit_button.value = jssm['search']['search_button'];
		ge('search_all_submit_button').disabled = true;
	
	
		var cl_ls = ge(clas + '_list');
		if(cl_ls) {
			cl_ls.innerHTML = jssm['search']['loading_title'];
		}
		else {
			var cl_ls = ge(target);
			if(target == 'm_ws'){
				current_item_in_wc = 'search_form';
				if(T['message_control'] != 1) {
					remove_message_control('s');
					build_nav_messages();
				}
				cl_ls.innerHTML = ''; // Member: Clear everything in Working Space area
			}
			
			var elem = ce("div");
			elem.className = 'attached_list';
		    elem.id = clas +'_list';
		    elem.innerHTML += jssm['search']['loading_title'];
		    cl_ls.appendChild(elem);
	
		}
	
	
		var r = new Object;
		r.typ = 'search';
		r.params = str;
		r.clas = clas;
		r.aborted = false;
		action_requests.push(r);
	} else {
		alert('Please select search criteria');
	}

	return false;
}

function root_location(){
	new_location('/');
}
function root_location_old(){

	var l = '/';
	if (window.location.protocol.indexOf('https') != -1){
		l = window.location + '';
		if (window.location.port && window.location.port > 1000){
			var p = 3000;
			l = window.location.protocol+'//'+window.location.hostname+':'+p+'/';
		} else {
		}
//		l = l.replace(/https/, 'http');
	}
	new_location(l);
}

function open_location(what){
	var l = window.location + '';
	var l1;
	if (what == 'members'){
		if (l.indexOf('dstaff') != -1){
			l1 = 'https://dmembers.distinctiveholidayhomes.com:3443/';
			
		} else {
			l1 = 'https://members.distinctiveholidayhomes.com/';
		}
	} else if (what == 'staff'){
		if (l.indexOf('dstaff') != -1){
			l1 = 'https://dstaff.distinctiveholidayhomes.com:3443/';
		} else {
			l1 = 'https://staff.distinctiveholidayhomes.com/';
		}
	} else {
		alert('open_location: can not open '+what);
	}
	window.location = l1;
}

function new_location (what) {
	if(document.all && what == '/') {
		location.reload();
	} else {
		window.location = what;
	}

}

function byBMember(a,b){
	var x = a.b_member.to_string;
	var y = b.b_member.to_string;
	return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}

function byStartDate(a,b){
	var x = a.start_date;
	var y = b.start_date;
	return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}

function byStartDatePerl(a,b){
	var x = a.start_date;
	var y = b.start_date;
	return byDate(x,y);
}

function byCreatedDate(a,b){
	var x = a.created_date;
	var y = b.created_date;
	return byDate(x,y);
}

function byReceivedDate(a,b){
	var x = a.received_date;
	var y = b.received_date;
	return byDate(x,y);
}


function byTransactionDate(a,b){
	var x = a.transaction_date;
	var y = b.transaction_date;
	return byDate(x,y);
}

function byDate(a,b){
	var x = new Date(Date.UTC(a.local_c.year,a.local_c.month-1,a.local_c.day,a.local_c.hour,a.local_c.minute,a.local_c.second));
	var y = new Date(Date.UTC(b.local_c.year,b.local_c.month-1,b.local_c.day,b.local_c.hour,b.local_c.minute,b.local_c.second));
	return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}

function byTransactionDatePlain(a,b){
	var x = a.transaction_date;
	var y = b.transaction_date;
	var x1 = a.booking_id;
	var y1 = b.booking_id;
	if (!x1){ x1 = '0';}
	if (!y1){ y1 = '0';}
	var x2 = a.expense_date;
	var y2 = b.expense_date;
	if (x < y){
		return -1;
	} else if (x > y){
		return 1;
	} else {
		if (x1 < y1){
			return -1;
		} else if (x1 > y1){
			return 1;
		} else {
			if (x1 == '0'){
				return 0;
			} else {
				if (x2 < y2){
					return -1;
				} else if (x2 > y2){
					return 1;
				} else {
					return 0;
				}
			}
		}
		
	}
//	return ((x < y) ? -1 : ((x > y) ? 1 : ( (x1 > y1) ? -1 : ((x1 > y1) ? 1 : ((x2<y2)?1:((x2>y2):0)) ))));
}

function byTransactionDatePlainDesc(b,a){
	var x = a.transaction_date;
	var y = b.transaction_date;
	var x1 = a.booking_id;
	var y1 = b.booking_id;
	if (!x1){ x1 = '0';}
	if (!y1){ y1 = '0';}
	var x2 = a.expense_date;
	var y2 = b.expense_date;
	if (x < y){
		return -1;
	} else if (x > y){
		return 1;
	} else {
		if (x1 < y1){
			return -1;
		} else if (x1 > y1){
			return 1;
		} else {
			if (x1 == '0'){
				return 0;
			} else {
				if (x2 < y2){
					return -1;
				} else if (x2 > y2){
					return 1;
				} else {
					return 0;
				}
			}
		}
		
	}
//	return ((x < y) ? -1 : ((x > y) ? 1 : ( (x1 > y1) ? -1 : ((x1 > y1) ? 1 : ((x2<y2)?1:((x2>y2):0)) ))));
}


function toggle_fav() {

	var but = ge('l_add_to_fav_link');
	if(!but){
		return;
	}
	var mode = '';
	var bid;
	
	for (var i in myBookmarks) {
		if(myBookmarks[i] && myBookmarks[i]['id'] == current_object){
			mode = 'remove';
			bid = myBookmarks[i]['bid'];
			break;
		}
	}
	
	if(mode == ''){
		mode = 'add';
	}


	but.onclick = function () {return manage_fav(bid,mode);};
	but.innerHTML = jssm['Destination'][mode + '_fav_title'];
}


function toggle_block (id) {

	var el = ge(id);
	if(el.style.display == 'none'){
		el.style.display = 'block';
	} else {
		el.style.display = 'none';
	}
	
	return false;
}

function submited(msg) {

	if(CM.object_id || CC.object_id || CA.object_id || SA.object_id || SS.object_id || JJ.object_id) { //FIXME This check shouldnt be here.

		var tmp = ge('the_details');
		if(tmp) {
			zap_if(ge('member_form_message'));
			var t = ce('div');
			t.id = 'member_form_message';
			t.innerHTML = 'Information has been saved';
			ge('the_details').firstChild.appendChild(t);
			setTimeout("if(ge('member_form_message')){ge('member_form_message').innerHTML = '';}",5000);
		}
		
	} else {
		if (msg){
				var z = ce('DIV');
				var m = ce('DIV');
				m.innerHTML = msg;
				m.id = 'submited_msg';
				z.appendChild(m);
				// FIXME. change = to += on the following line 
				ge('external_form').innerHTML =z.innerHTML;
//				hide_submited_msg();
				delete z;
		}
	}

}

function hide_submited_msg(){
	setTimeout("ge('submited_msg').innerHTML='';", 8000);
}


function toggle_faq_block (id) {
	var el = ge(id);

	if(el.style.display == 'none'){
		if(faq_my_open_answer != '' && faq_my_open_answer != id) {
			ge(faq_my_open_answer).style.display = 'none';
			ge(faq_my_open_answer+'_link').style.fontWeight = 'normal';
		}
		el.style.display = 'block';
		el.ondblclick=dd_sm;
		ge(id+'_link').style.fontWeight = 'bold';
		var img = ge(id).getAttribute('img');
		if(img) {
			kill_image_caption();
			ge('Propaganda_Propaganda::image').firstChild.src = T['system_images_path']+img;
			var obj = new Object;
			var ic = new Object;
			ic.curlang = ge(id).title;
			obj.image_caption = ic;
			add_image_caption(obj);
		}
		faq_my_open_answer = id;
	} else {
		el.style.display = 'none';
		ge(id+'_link').style.fontWeight = 'normal';
		faq_my_open_answer = '';
	}


	
	return false;
}

function toggle_ttd_block (id,s) {
	if(s) {
		id = id + '_' + s;
	}
	var el = ge(id);
	if(el.style.display == 'none'){
		

		el.style.display = 'block';
		el.ondblclick=dd_sm;
		ge(id+'_link').style.fontWeight = 'bold';
		if(!s) {
			if(T['ttd_open_section'] && T['ttd_open_section'] != '' && T['ttd_open_section'] != id) {
				ge(T['ttd_open_section']).style.display = 'none';
				ge(T['ttd_open_section']+'_link').style.fontWeight = 'normal';
			}
			T['ttd_open_section'] = id;
		} else {
			if(T['ttd_open_item'] && T['ttd_open_item'] != '' && T['ttd_open_item'] != id) {
				ge(T['ttd_open_item']).style.display = 'none';
				ge(T['ttd_open_item']+'_link').style.fontWeight = 'normal';
			}
			T['ttd_open_item'] = id;
		}
	} else {
		el.style.display = 'none';
		ge(id+'_link').style.fontWeight = 'normal';
		if(!s) {
			T['ttd_open_section'] = id;
		} else {
			T['ttd_open_item'] = id;
		}

	}

	return false;

}

function forg_pass (data) {

	ge('forg_pass_b').disabled = false;
	toggle_block('forg_pass');
	alert(data);

}




// history
function initialize() {
//            dhtmlHistory.initialize();
//            dhtmlHistory.addListener(historyChange);
}
         

function historyChange(newLocation, historyData) {
//		checkLocation();
}
         


if (!document.all){
	window.captureEvents(Event.MOUSEMOVE);
	window.onmousemove=onmousemoved;
} else {
	document.onmousemove = onmousemoved;
}

var mmoved = 0;
var nomove = 0;
var mo_to;

function onmousemoved (){

	mmoved = 1;
	if (mo_to){
		clearTimeout(mo_to);
	}
}

var WEHAVENOTIME;

function dontmove(){

	if (mo_to){
		clearTimeout(mo_to);
	}
	nomove  = 1;
}

function checkLocation () {
	clear_timeouts();
return;
	var where = location.href.split('#');
	var tmp = where[1];
	if (!tmp){tmp = '';};
	if(!uris[tmp.toLowerCase()]) {
		return false;
	} else {
		if (tmp != WEHAVENOTIME && AJAX_NAV == 0){
			yoyo(uris[tmp.toLowerCase()]['id'],uris[tmp.toLowerCase()]['clas'],1);
		}
		WEHAVENOTIME=tmp;
		if (AJAX_NAV == 1){AJAX_NAV=0;}
		return true;
	}
	 
}



function build_uris() {

	var tmp;
	for(var x = 0; x < jsmenu.length; x ++) {
		tmp = new Array();
		tmp['id'] = jsmenu[x].id;
		tmp['clas'] = 'Propaganda';
		uris[jsmenu[x].uri] = tmp;

	}

	for(var x = 0; x < points.length; x ++) {
		tmp = new Array();
		if (points[x].readiness == 'active' || points[x].readiness == 'coming'){
			tmp['id'] = points[x].object_id;
			tmp['clas'] = 'Destination';
			uris[points[x].uri] = tmp;
		}
	}

}

var jsmenu;
function build_uris2() {

	var tmp;
	if(CA.object_id || CC.object_id || CM.object_id) {
		return;
	}
	if (!jsmenu){return;}
	for(var i=0; i < jsmenu.length; i ++) {
		tmp = new Array();
		tmp['id'] = jsmenu[i].id;
		tmp['clas'] = 'Propaganda';
		uris[jsmenu[i].uri] = tmp;

	}

	for (var i = 0; i < ddd.length; i ++) {
		tmp = new Array();
		if (ddd[i].readiness == 'active' || ddd[i].readiness == 'coming'){
//		if (ddd[i].readiness){
			tmp['id'] = ddd[i].object_id;
			tmp['clas'] = 'Destination';
			tmp['orig'] = ddd[i].orig;
			uris[ddd[i].uri] = tmp;
		} else if (ddd[i].cl){

			tmp['orig'] = ddd[i].orig;
			tmp['id'] = ddd[i].object_id;
			tmp['clas'] = ddd[i].cl;
			uris[ddd[i].uri] = tmp;
		}
	}

}

function google_stats(extra) {
	if (window.location.hostname.split('.')[0] == 'dev' 
			|| (CM && CM.object_id) 
			|| (CA && CA.object_id) 
			|| (SA && SA.object_id) 
			|| (SS && SS.object_id) 
			|| (CC && CC.object_id)
			|| (JJ && JJ.object_id)	) {
		return;
	}
	if (_uacct){
		var place = window.location.pathname;
		if(extra && extra!='') {
			place += '/'+extra;
		}	
		urchinTracker(place);

	}

}







function datetime_formatted (d){
	
	var ret = d.local_c.day + ' ' + Months_short[d.local_c.month-1] + ' ' + d.local_c.year;
	var hr = printf("%02d:%02d",d.local_c.hour,d.local_c.minute);
	if (hr != '00:00'){
		ret += ' ' + hr + ' UTC';
	}
	return ret;
}

function time_formatted (d){
	
	return printf("%02d:%02d:%02d UTC",d.local_c.hour,d.local_c.minute,d.local_c.second);
}

function date_formatted (d){
	if (!d){
		return '';
	}
	var ret = d.local_c.day + ' ' + Months_short[d.local_c.month-1] + ' ' + d.local_c.year;
	return ret;
}

function js_date_formatted (d){
	if (!d){
		return '';
	}
	var ret = d.getUTCDate() + ' ' + Months_short[d.getUTCMonth()] + ' ' + d.getUTCFullYear();
	return ret;
}

function currency_formatted(d){
	var SS = printf("%.2f", d);
	var T = "", S = String(SS), L = S.length - 1, C, j, P = S.indexOf(".") - 1;
	if (P < 0) { P = L; }
 	for (var j = 0; j <= L; j++) {
		T += C = S.charAt(j);
			if (j < P && (P - j) % 3 == 0 && C != "-") {
            T += ",";
      }
	}
	return T;
}



function addDays2Date(src_date,i) {
		var tmp_date = new Date (src_date);
		tmp_date.setUTCDate(src_date.getUTCDate() + i);
		return tmp_date;
}

function addYears2Date(src_date,i){
		var tmp_date = new Date (src_date);
		tmp_date.setUTCFullYear(src_date.getUTCFullYear() + i);
		return tmp_date;
}


function date_perl2js(a){
	var x = new Date(Date.UTC(a.local_c.year,a.local_c.month-1,a.local_c.day));
	return x;
}

function datetime_perl2js(a){
	var x = new Date(Date.UTC(a.local_c.year,a.local_c.month-1,a.local_c.day,a.local_c.hour,a.local_c.minute,a.local_c.second));
	return x;
}


function days_in_month (year, month) {
     return 32 - new Date(year, month, 32).getDate();
}


function checkDate (st,en,range) {

	if(range == 2) {

		var arr = st.split('-');
		if (arr[0] == 0) {
			arr[0] = 1;
			ge('mstart_date_day').value = 1;
			st = arr.join('-');
		}

		var arr = en.split('-');
		if (arr[0] == 0) {
			arr[0] = 31;
			ge('mend_date_day').value = 31;
			en = arr.join('-');
		}


		updateDate('mend_date');
		updateDate('mstart_date');
			
	}

	var s = checkIfFullDate(st);
	var e = checkIfFullDate(en);

	if(!s || !e) {
		alert('Please select correct date range');
		return false;
	} 
	
	if ((s == 1 && e == 4) || (s == 4 && e == 1)) {
		alert('Please select both or neither dates');
		return false;
	}

	if(range != 0 && (st == "0-0-0" || en == "0-0-0")) {
		alert('Please select date range');
		return false;
	}



	if(range != 0) {
	
		var arr;
		arr = st.split('-');

		if(arr[0] > days_in_month(arr[2],arr[1]-1)) {
			alert('Wrong start date selected');
			return false;
		}

		var sDate = new Date();
		sDate.setUTCFullYear(arr[2]);
		sDate.setUTCMonth(arr[1]-1);
		sDate.setUTCDate(arr[0]);
	
		arr = en.split('-');

		if(arr[0] > days_in_month(arr[2],arr[1]-1)) {
			alert('Wrong end date selected');
			return false;
		}

		var eDate = new Date();
		eDate.setUTCFullYear(arr[2]);
		eDate.setUTCMonth(arr[1]-1);
		eDate.setUTCDate(arr[0]);		

		if(sDate >= eDate) {
			updateDate('mend_date','strict','auto');
			alert('End date should be greater than start date');
			return false;
		}

		if(range == 1) {
			if((eDate - sDate)/1000/24/3600 > max_days) {
				var n = new Date();
				n = sDate;
				n.setUTCDate(sDate.getUTCDate()+max_days);	
				n.setUTCMonth(sDate.getUTCMonth()+1);
				alert('Range Type: Strict Please select range maximum of '+max_days+' days. Not exceeding ' + n.getUTCDate() + '/' +n.getUTCMonth() + '/' +  n.getUTCFullYear());
				return false;
			}
		}
	}

	return true;

}

function checkIfFullDate (d) {

	
	var arr = d.split('-');

	if(!(arr[0] == '0' && arr[1] && '0' || arr[2] && '0') && (arr[0] == '0' || arr[1] == '0' || arr[2] == '0')){
		return false;
	}
	if(arr[0] == '0' && arr[1] && '0' || arr[2] && '0') {
		return 4;
	} else {
		return 1;
	}


}

var Days = new Array;
Days.push('Sunday');
Days.push('Monday');
Days.push('Tuesday');
Days.push('Wednesday');
Days.push('Thursday');
Days.push('Friday');
Days.push('Saturday');

var Days_short = new Array;
Days_short.push('Sun');
Days_short.push('Mon');
Days_short.push('Tue');
Days_short.push('Wed');
Days_short.push('Thu');
Days_short.push('Fri');
Days_short.push('Sat');

var Months = new Array;
var Months_short = new Array;
