/******************************************************************
 Creates div dialog for return data or "hover stick" jquery dialogs
 ******************************************************************/
var mrcValidate = true;
var load = new Array();
var objAry = new Array();
document.write('<script type="text/javascript" src="/mrcjava/mrcclasses/jquery.blockUI.js"></script>');
jQuery(document).ready(function() {
	jQuery("body").prepend("<div id=\"dialog\" title=\"\"></div>");
	jQuery("#dialog").dialog({
           autoOpen: false,
           modal: true,
           height: 'auto',
           width: '700',
           position: ['center',100],
           bgiframe: true,
           draggable:true,
		   resizable:false,
		   overlay: { opacity: 0.7, background: "black" }, 
		   dragStart:  function(event, ui) {jQuery('#dialog').block({ message: null,  overlayCSS:{ backgroundColor: '#FFF', opacity: .1 }});  },
		   dragStop:  function(event, ui) {jQuery('#dialog').unblock(); }
       });
	setupPopupDialog();
	var isIRT = jQuery("#select_menu").length;
	if(isIRT == 0){
		initializeAjaxHelpers();
	}
    //loadApps();
	//setupForm();
}); 
function setupPopupDialog(){
	jQuery('a[mrc=returndata]').click(function(e) {
		e.preventDefault();
		var app = jQuery(this).attr('href');
		var parmIndex = app.indexOf("?");
		var parms = app.substring(parmIndex + 1);
		var parmAry = parms.split('&');
		var splitParms;
		var height = 0;
		var width = 0;
		var text = '';
		var hoverRedir = '';
		for (var i = 0; i < parmAry.length; i++){
			splitParms = parmAry[i].split("=");
			if(splitParms[0] == 'height'){
				height = splitParms[1];
				}
			if(splitParms[0] == 'width'){
				width = splitParms[1];
				}
			if(splitParms[0] == 'text'){
				text = splitParms[1];
			}
			if(splitParms[0] == 'title'){
				text = splitParms[1];
			}
			if(splitParms[0] == 'windowtitle'){
				text = splitParms[1];
			}
		}
		var hoverIndex = app.indexOf('&hover_redir');
		if(hoverIndex > 0){
			hoverRedir = app.substring(hoverIndex + 13);
		}else {
			hoverRedir = '';
		}
		modalDialog(app, text, height, width, hoverRedir);	
	});
}
function registerDialog(appnum){
	jQuery.fx.speeds._default = 1000;
	load[load.length] = appnum;
    jQuery("#" + appnum ).dialog({
	autoOpen: false,
	show: 'blind',
        buttons: { "Ok": function() { 
             loadApp(jQuery("#" + appnum).attr('id'));
			 jQuery("#" + appnum).dialog("close");
        }}
    });
}
function toggleSelectionSource(id){
	var source =  jQuery("#" + id).attr('mrcappurl');
	if(source == '1'){
		jQuery("#" + id).attr('mrcappurl', '2');
	}else{
		jQuery("#" + id).attr('mrcappurl', '1');
	}
}
function loadApps(){
	jQuery("div[app]").each(function(){
		if(jQuery("#" + jQuery(this).attr('appnum')).attr('mrcappurl') == '1'){
			var appUrl = jQuery(this).attr('app');
			var appnum = jQuery(this).attr('appnum');
			ajaxLoadApp(appUrl,appnum);
		}else{
			createUrl(jQuery(this).attr('appnum'));
		}
	});
}
function loadApp(id){
	if(jQuery("#" + id).attr('mrcappurl') == '1'){
		var appUrl = jQuery("div[appnum=" + id + "]").attr('app');
		var appnum = jQuery("div[appnum=" + id + "]").attr('appnum');
		ajaxLoadApp(appUrl,appnum);
	}else{
		createUrl(id, 1);
	}
}
var pageButton = '';
function createUrl(id, type){
	var appUrl = jQuery("div[appnum=" + id + "]").attr('app2');
    var appnum =  jQuery("div[appnum=" + id + "]").attr('appnum');
    var parms = '';
    jQuery("div#" + id).find(":input[type!=image]").each(function(){
        parms += '&' + jQuery(this).attr('name') + '=' + jQuery(this).val();
    });
	if (pageButton != ''){
		parms += '&' + pageButton + '.x=1';
	}
	parms = parms.replace("&btn_search=Filter","");
	if(type == 1){
		ajaxLoadApp(appUrl+parms,appnum);
	}else if (type == 2){
		ajaxPostApp(appUrl+parms,appnum);
	}
}
function ajaxLoadApp(appUrl,appnum){
	jQuery.ajax({ url:appUrl, data:'x=' + Math.random(), dataType: "html",
		success: function(data, textStatus) {  //Ajax success!
			var needToRegisterDialog = true;
			jQuery("div[appnum=" + appnum +"]").html(data);
			jQuery("form[name=FORM_" + appnum + "]").find("input[type=image]").click(function(){
				pageButton = jQuery(this).attr('name');
			});
			jQuery("form[name=FORM_" + appnum + "]").submit(function(e){
				e.preventDefault();
				createUrl(appnum,2);
			});
			pageButton = '';
			/* for(var i = 0;i < load.length;i++){
				if(load[i] == appnum){
					needToRegisterDialog = false;
					break;
				}
			}
			if(needToRegisterDialog == true){
				registerDialog(appnum);
			}else{
				jQuery("div[appnum=" + appnum + "]").find("#" + appnum).remove();
			}*/
		},
		error: function(XMLHttpRequest, textStatus, errorThrown) { //Ajax failed
			alert(textStatus);
		},
		complete: function(XMLHttpRequest, textStatus) { //Ajax completed  
		}
	});   
}
function ajaxPostApp(appUrl,appnum){
	jQuery.ajax({   type: "POST", url:appUrl, data:'x=' + Math.random(), dataType: "html",
		success: function(data, textStatus) {  //Ajax success!
			var needToRegisterDialog = true;
			jQuery("div[appnum=" + appnum +"]").html(data);
			jQuery("form[name=FORM_" + appnum + "]").find("input[type=image]").click(function(){
				pageButton = jQuery(this).attr('name');
			});
			jQuery("form[name=FORM_" + appnum + "]").submit(function(e){
				e.preventDefault();
				createUrl(appnum,2);
			});
			pageButton = '';
			/* for(var i = 0;i < load.length;i++){
				if(load[i] == appnum){
					needToRegisterDialog = false;
					break;
				}
			}
			if(needToRegisterDialog == true){
				registerDialog(appnum);
			}else{
				jQuery("div[appnum=" + appnum + "]").find("#" + appnum).remove();
			}*/
		},
		error: function(XMLHttpRequest, textStatus, errorThrown) { //Ajax failed
			alert(textStatus);
		},
		complete: function(XMLHttpRequest, textStatus) { //Ajax completed  
		}
	});   
}
/******************************************************************
Check document for ajax helper attributes and apply to fields.
 ******************************************************************/
function initializeAjaxHelpers(){
	jQuery("input[mrcsuggest]").each(function(){
        var lookupTable = jQuery(this).attr('mrclookup');
        var type = 'suggest'
        var mnt_fld = jQuery(this).attr('id');
        var ret_fld = jQuery(this).attr('mrclookupfield');
		
		set_ajax_suggest(lookupTable, ret_fld, mnt_fld);
    });
	 jQuery("select[mrcajaxdropdown]").each(function(){
        var lookupTable = jQuery(this).attr('mrclookup');
        var type = 'dropdown'
        var cur_fld = jQuery(this).attr('id');
        var cascadeField = jQuery(this).attr('mrccascadefield');
		var lookupField = jQuery(this).attr('mrclookupfield');
		if(cascadeField == null || cascadeField == ''){
			cascadeField = '';
		}
		set_ajax_dropdown(lookupTable, cur_fld, cascadeField, lookupField, 'load');
		
    });
	jQuery("select[mrccascadefield]").each(function(){
		var cascadeField = jQuery(this).attr('mrccascadefield');
		jQuery("#" + cascadeField).change(function(){
				setCascadingDropdowns(cascadeField);
			});
    });
	 /*jQuery("input[mrclookuplist]").each(function(){
        var lookupTable = jQuery(this).attr('mrclookup');
        var type = 'lookup';
        var mnt_fld = jQuery(this).attr('id');
        var ret_fld = jQuery(this).attr('mrclookupfield');
		
		jQuery(this).blur(function(){
			callAjaxLookup(lookupTable, mnt_fld, ret_fld,'lookup', 999);
		});
    });*/
	jQuery("form").each(function() {
		var form = this;
		var lookupExists = jQuery(this).find("input[mrclookuplist]").length;
		var requiredFieldsExist = jQuery(this).find("input[mrcrequired=required],textarea[mrcrequired=required]").length;
		if(lookupExists != 0 || requiredFieldsExist !=0 ){
			jQuery(this).find("input[type=submit]").each(function(){
				jQuery(this).click(function(event){
					if(requiredFieldsExist != 0){
						var validated = checkRequiredFields(form);
						if(validated == false){
							event.preventDefault();
						}
					}
					if(validated != false && lookupExists !=0){
						event.preventDefault();
						return mrcAjaxValidateForm(form, 0);
					}
				});
			});
			jQuery(this).keydown(function(e){
				if(e.keyCode == 13){
					e.preventDefault();
					if(requiredFieldsExist != 0){
						var validated = checkRequiredFields(form);
						if(validated == true && lookupExists == 0){
							jQuery(this).submit();
						}
					}
					if(validated != false && lookupExists !=0){
						e.preventDefault();
						return mrcAjaxValidateForm(form, 0);
					
					}
					
				}
			});
		}
	});
	makeSortable();
}
function irtCallback(){
	makeSortable();
	setupPopupDialog();
}
function makeSortable(){
	try{
	jQuery("div[mrctype=tabs]").tabs();
	
	jQuery("table[mrcsortable=yes] > tbody > tr> td").addClass('sort');
	var collapsed = jQuery("div[mrctype=accordion]").attr('collapsed');
	var xcollapsed;
	if(collapsed =='yes'){
		xcollapsed = false;
	}else{
		xcollapsed = 0;
	}
	jQuery("div[mrctype=accordion]").accordion({
			autoHeight: false,
			collapsible: true,
			active: xcollapsed
		});
	jQuery(".sort").sortable({
			connectWith: '.sort',
                start: function(event, ui) {
                                jQuery(".sort").css('background','#CBDBE6');
                                makePlaceholders(ui.item);
                                },
                stop: function(event, ui) {
                                jQuery(".sort").css('background','');
                                  jQuery(".sort").height('');
                                   jQuery(".sort").width('');
                                },
                over: function(event, ui) {
                                jQuery(this).css('border-style','dashed');
								jQuery(this).css('border-width','2px');
								jQuery(this).css('border-color','#000000');},
                out: function(event, ui) {
                                //jQuery(this).css('background','#CBDBE6');}
								jQuery(this).css('border-style','')
								jQuery(this).css('border-width','');}
		});
		jQuery(".portlet").addClass("ui-widget ui-widget-content ui-helper-clearfix ui-corner-all")
			.find(".portlet-header")
				.addClass("ui-widget-header ui-corner-all")
				.prepend('<span class="ui-icon ui-icon-minusthick"></span>')
				.end()
			.find(".portlet-content");
		jQuery(".portlet-header .ui-icon").click(function() {
			jQuery(this).toggleClass("ui-icon-minusthick").toggleClass("ui-icon-plusthick");
			jQuery(this).parents(".portlet:first").find(".portlet-content").toggle();
		});
		jQuery(".sort").disableSelection();
	}catch(err){
	
	}
}
function makePlaceholders(ui){
   var height= jQuery(ui).height();
   var width = jQuery(ui).width();
        jQuery(".sort").height(height + 'px');
    jQuery(".sort").width(width + 'px');
}
/******************************************************************
Check if field is set to required
 ******************************************************************/
function checkRequiredFields(form){
	var validated = true;
	jQuery(form).find(":input[mrcrequired=required]").each(function(){
		var field = jQuery(this).attr('id');
		jQuery("#" + field + "fieldRequired").hide();
		if(jQuery(this).get(0).tagName == 'INPUT' && jQuery(this).val() == '' || jQuery(this).val() == 0){
			var id = jQuery(this).attr('id');
			jQuery("#" + id + "fieldRequired").show();
			validated = false;
		}else if(jQuery(this).get(0).tagName == 'TEXTAREA' && (jQuery(this).text() == '' || jQuery(this).text() == 0)){
			var id = jQuery(this).attr('id');
			jQuery("#" + id + "fieldRequired").show();
			validated = false;
		}
	});
	return validated;
}
/******************************************************************
Close dialog called from retrieval return data link
 ******************************************************************/
function closeDialog(){
	jQuery("#dialog").dialog('close');
}
/******************************************************************
modalDialog() called from link, receives parameters
for width and height as well as the target app to set in the dialog iframe.
 ******************************************************************/
function modalDialog(link,text, height, width, hoverRedir){
	var browser = navigator.appName;
	if(browser.indexOf('Microsoft') >= 0){
		jQuery("#dialog").dialog('option','width',width );
	}else {
		jQuery("#dialog").dialog('option','width',width);
	}
	jQuery("#dialog").css('padding',0);
	jQuery("#dialog").dialog('option','title', text);
	jQuery("#dialog").dialog("open");
	jQuery('.ui-widget-overlay').css('opacity', .40);
	jQuery('.ui-widget-overlay').css('background', 'black');
	jQuery("#dialog").html( "<iframe id=\"modalIframeId\" src=\"\" title=\"" +text + "\" height=\"" + height + "\" marginheight=\"0\" frameborder=\"0\" width=\"" + width + "\" marginwidth=\"0\"></iframe>");
	jQuery("#modalIframeId").load(function(){
		jQuery("#modalIframeId").contents().find("form").submit(function(){
			if(hoverRedir != ''){
				jQuery("#dialog").dialog('close');
				window.location = hoverRedir;
			}
		});
	});
	jQuery("#modalIframeId").attr('src', link);
	return false;
} 
//*****************************************************************************
// Functions used by report/summary to handle multiple inputs for In The List
//****************************************************************************
 
/*********************************************************
 * Called from application at page load.
 ********************************************************/
function initsetup(formid) {    
    
    jQuery('.add-input').click(function() {  //Add link clicked     
        makeInput(jQuery(this));
    });
    
    jQuery('.add-input a').bind('click', cancelDefault);
 
    jQuery('input.ls').keyup(function() { //entered text in list input
        checkInput(jQuery(this).attr('fn') ); //fn=R00x
    });
 
    jQuery('#' + formid).submit(function() {
       var ok = checkInputAll();
       return ok;
    });
    
    //parse LS/NS values for update mode (error occured)
    jQuery('.lsinput').each(function() {
       var val = jQuery(this).val();
       var theid = jQuery(this).attr('id'); //id=R00x
       if (val == '') {
           return true; //continue;
       }
       makeInputUpdate(theid, val)
    }); 
}
function cancelDefault(evt) {
     evt.preventDefault();
}
/*********************************************************
 * Make input for update mode (error mode)
 ********************************************************/
function makeInputUpdate(divId, val) {
   var values = getValues(val);
   for (var i=0; i < values.length; i++) {
       if (i > 2) {
          makeInputUpdate2(divId, values[i]);
          continue;
       }
       var input0 = jQuery("#div" + divId + " .one-input0");
       jQuery(input0).eq(i).find('input').val(values[i]);
   }
  
   jQuery('input.ls').keyup(function() {
       checkInput(jQuery(this).attr('fn') ); //fn=R00x
   });
}
/*********************************************************
 * Make input for update mode (error mode)
 ********************************************************/
function makeInputUpdate2(divId, val) {
   var cloneDiv = "#div" + divId + " #oi" + divId;
   var inputDiv = jQuery(cloneDiv);
   var input1 =  inputDiv.clone();
   input1.attr('id','xxx').find('input').val(val);
   var addDiv = "#div" + divId + " .add-input";
   jQuery(addDiv).before(input1);
}
/*********************************************************
 * Make input when user click Add link.
 ********************************************************/
function makeInput(addDiv) {
   var inputDiv = jQuery(addDiv).next().children();
   var input1 =  inputDiv.clone();
   input1.attr('id','xxx').find('input').val("");
   jQuery(addDiv).before(input1);
  
   jQuery('input.ls').keyup(function() {
        checkInput(jQuery(this).attr('fn') ); //fn=R00x
   });
 
   return input1;
}
/*********************************************************
 * Check all inputs of in the list 
 ********************************************************/
function checkInputAll() {
   var OK = true;
   jQuery('.lsinput').each(function() {
       OK = false;
       isok = checkInput(jQuery(this).attr('id') ); //fn=R00x
       if (!isok) {
           jQuery(this).focus().select();
           return false;
       }
       OK = true;
   });
 
   return OK;
}
/*********************************************************
 * Check if we can derive delimiter.
 ********************************************************/
function checkInput(inputId) { 
 
   dspError('', inputId); 
   var inputs = jQuery.makeArray( jQuery('.' + inputId) );
   if (inputs.length == 0) {
       return true; 
   }
   //find delimiter
   var valtot = "";
   for (var i = 0; i < inputs.length; i++) {
       var val = jQuery.trim( jQuery(inputs[i]).val() );
       valtot += val;
   }
   var deli0 = getDelimiter(valtot);
   if (!deli0) {
      dspError('Values cannot contain all of " ", "&", "#", "@", "%", "*", ":", ";"', inputId);  
      return false;
   }
   
   //put value in value3
   var val3 = "";
   var deli = ""; 
   var numInputs = 0;
   for (var i = 0; i < inputs.length; i++) {
       var val = jQuery.trim( jQuery(inputs[i]).val() );
       if (val == '') { continue; }
      
       val3 += deli + val;
       numInputs++;
       deli = deli0;
   }
   
   if (val3 != '') { 
      val3 += '!' + deli0 + '!';
   }
   
   jQuery('#' + inputId).val(val3);
   //alert(val3);
   return true; //OK
}
/*************************************************************/
 // Display error
/************************************************************/
function dspError(errtext, msgId) {
    jQuery('#msg' + msgId).text(errtext);  
}
/****************************************************************/
 // Returns the delimiter not used in the string value.
 // Return null if string contains all delimiters in definition.
/****************************************************************/
var delimiters = [" ", "&", "#", "@", "%", "*", ":", ";"];
function getDelimiter(value) {
   if (!value) {
       return " " ;
   }
   value = jQuery.trim(value);   
   var deli = null;
   for (var i = 0; i < delimiters.length; i++) {
       if (value.indexOf(delimiters[i]) < 0) {
           deli = delimiters[i];
           break;
       }
   }  
   return deli;
}
/****************************************************************/
 // Returns values in a value3 field 'aa aa&bb bb!&!'
/****************************************************************/
function getValues(value) {
   var reg = /!\W!/; 
   var arr = reg.exec(value);
   if (!arr) {
       var myArray = [];
       return myArray; //empty array      
   }
   var deli = arr[0].substring(1,2);
   var value0 = value.substring(0, arr.index);
   var values = value0.split(deli);
   //alert(arr[0] + "==" + arr.index + '==' + arr.input)
   return  values;
}
/****************************************************************/
 // validate forms with ajax
/****************************************************************/
function mrcAjaxValidateForm(form, index){
	var thisEle = jQuery(form).find('input[mrclookuplist]').eq(index);
	if (!thisEle || thisEle.length == 0) {
		if(!jQuery('input[mrclookuplist][fldvalid=false]').length > 0){
		jQuery(form).submit();
		}
	    return;
	}
	var cur_fld = jQuery(thisEle).attr('id');
	var lookupTable = jQuery('#' + cur_fld).attr('mrclookup');
	var ret_fld = jQuery('#' + cur_fld).attr('mrclookupfield');
	var fieldValue = jQuery("#" + cur_fld).val();
	var otherParms = '&val_' + ret_fld + '=' + encodeURIComponent(jQuery.trim(fieldValue)) + '&rls_' + ret_fld + '=EQ';
	setTimeout(function() {makeHelperAjaxCall(cur_fld, mrcAjaxValidateForm, form, index +1);}, 50);
	
}
/****************************************************************/
 // Do not submit form until ajax callbacks complete
/****************************************************************/
function waitForCallBackComplete(form){
	var mrcContinue = true;
	for(var i = 0; i < objAry.length;i++){
		if( objAry[i].success == false){
			mrcContinue = false;
			break;
		}	
	}
	if( mrcContinue == false){
		callTimeout(form);
	}else{
		for(var i = 0; i < objAry.length;i++){
			
			if(objAry[i].valid == false){
				mrcValidate = false;
				break;
			}	
		}
		if( mrcValidate == true){
			jQuery(form).submit();
		} else{
			return false;
		}
	}
}
function callTimeout(form){
	setTimeout(function(){ waitForCallBackComplete(form)}, 500); 
}
/*
function setupForm(){
	jQuery("form").each(function(){
		var id = jQuery(this).attr('id');
	
		jQuery("#"+ id).ajaxForm(function(data, responseText) { 
			data = '<div>' + data.toString() + '</div>';
			var el = jQuery(data);
			var form = jQuery(el).find("#" + id);
			jQuery("#" + id).after(form).remove();
			setupForm();
		}); 
		var options = {complete: function(XMLHttpRequest, textStatus) {
			alert(XMLHttpRequest.getAllResponseHeaders());
			}};
		jQuery("#"+ id).ajaxForm(options);
	});
}*/
function showResponse(responseText, statusText, xhr, $form)  { 
    // for normal html responses, the first argument to the success callback 
    // is the XMLHttpRequest object's responseText property 
 
    // if the ajaxForm method was passed an Options Object with the dataType 
    // property set to 'xml' then the first argument to the success callback 
    // is the XMLHttpRequest object's responseXML property 
 
    // if the ajaxForm method was passed an Options Object with the dataType 
    // property set to 'json' then the first argument to the success callback 
    // is the json data object returned by the server 
 
    alert('status: ' + statusText + '\n\nresponseText: \n' + responseText + 
        '\n\nThe output div should have already been updated with the responseText.'); 
} 
