// epsv2.js
var pageScope = {};
var multiPageScope = {};
var sessionScope = {};
var serverCallOn = false;
var contextRoot = '/QEPS';
var allRTEArray=new Array();   // ADDED FOR HANDLING RICH TEXT EDITORS
//var console = {debug:function(str){alert(str);}}
function log(/*String*/ msg) {
	/*if (typeof console!='undefined') console.debug(msg);
	else alert(msg);*/
};

var Util = {
	clearContent : function(/*JQueryObject*/ content) {
		if ($.browser.msie) {
			$("button",content).each(function(){this.onclick=null;});
			$("select[onchange]",content).each(function(){this.onchange=null;});
		}
		if (content.attr("id")=="_msgBox") content.css("display","none");
		content.empty();
		return content;
	},
	clearArray : function(/*Array*/ arr) {
		for(var i in arr) arr[i]= null;
		arr.length = 0;
	},
	clearObject : function(/*Object*/ obj) {
		for(var prop in obj) {
			if (typeof obj[prop]=='object') Util.clearObject(obj[prop]);
			delete obj[prop];
		}
	},
	assertNoServerCall: function() {
		if (!serverCallOn) return true;
		log("serverCallOn....");
		$("#_msgBox").show().html('<img src="image/error.jpg"> fmt message for Server is busy. Please wait...');
		return false;
	},
	addRow: function(/*String*/ tableId,/*Function*/ callback) {
		var table = $('#'+tableId);
		var noOfRows = $('tr',table).length;
		var clonedRow = $("tr:last",table).clone(); 
		if (noOfRows%2==0) clonedRow.addClass('alternateColumnClass'); 
		else clonedRow.removeClass('alternateColumnClass'); 
		$('input,textarea,select,checkbox,radio',clonedRow).each(function(){
			//alert("for="+this.id);
			var start = this.id.substring(0,this.id.lastIndexOf('['));
			var end = this.id.substring(this.id.lastIndexOf(']'));
			this.id = start+'['+noOfRows+end;
			//alert("new id = "+this.id);
			this.name=this.id;
			this.value='';
		});
		$('textarea',clonedRow).empty();
		table.append(clonedRow);
		if (callback!=null) callback.call();
	},
	delRow: function(/*String*/ tableId) {
		var table = document.getElementById(tableId);
		if (table.rows.length==1) return;
		table.deleteRow(table.rows.length-1);
	},
	disableForm: function(/*String*/ formId) {
		var form;
		if (formId==null) form = $("form[id!='dummyForm']");
		else form = $("#"+formId);
		$('input,textarea,select',form).attr('disabled','disabled');
		$('button[id!="_exit"]').attr('disabled','disabled');
	},
	showMessage: function(/*Object*/ data) {
		if ($("#_msgBox").length==0) {
			$("#_content").prepend('<DIV id="_msgBox" class="msgBox"></DIV>');
		}
		var msgBox = $("#_msgBox").show();
		if (data["_errors"]!=null) {
			$.each(data["_errors"],function(/*int*/ index,/*String*/ msg){
				msgBox.append('<img src="../image/error.jpg">&nbsp;'+msg+'<br>');
			});
		}
		if (data["_infos"]!=null) {
			$.each(data["_infos"],function(/*int*/ index,/*String*/ msg){
				msgBox.append('<img src="../image/info.jpg">&nbsp;'+msg+'<br>');
			});
		}
	}, 
	killEnter: function(evt)
	{
	    if(evt.keyCode == 13 || evt.which == 13)
		{
			return false;
		}
		return true;
	},
	LTrim: function(value) {
		var re = /\s*((\S+\s*)*)/;
		return value.replace(re, "$1");
	},
	RTrim: function(value) {
		var re = /((\s*\S+)*)\s*/;
		return value.replace(re, "$1");
	},
	trim: function(value) {
		return Util.LTrim(Util.RTrim(value));
	},
	IsNumeric: function(/*String*/strString) {
		var strValidChars = "0123456789.";
   		var strChar;
   		var blnResult = true;
   		if (strString.length == 0) return false;
		for (i = 0; i < strString.length && blnResult == true; i++)
		{
		   strChar = strString.charAt(i);
		   if (strValidChars.indexOf(strChar) == -1)
		   {
		      blnResult = false;
		   }
		}
   		return blnResult;
	},
	IsInteger: function(/*String*/strString) {
		var strValidChars = "0123456789";
   		var strChar;
   		var blnResult = true;
   		if (strString.length == 0) return false;
		for (i = 0; i < strString.length && blnResult == true; i++)
		{
		   strChar = strString.charAt(i);
		   if (strValidChars.indexOf(strChar) == -1)
		   {
		      blnResult = false;
		   }
		}
   		return blnResult;
	}
}; 
var Controller = {
	getStep:function (urlStr,formName,methodName,documentId,subDocumentId,values,stepId,isHandle,csrfToken,stepCoveredId){
	
	if($("input[name='_documentId']","#"+formName).length!=0){
		
		$("input[name='_documentId']","#"+formName).val(documentId)
	}else{

		var documentIdHTML="<input type='hidden' name='_documentId' id='_documentId' value='"+ documentId+"'/>";
		$("#"+formName).append(documentIdHTML);		
	}
	
	if($("input[name='_subDocumentId']","#"+formName).length!=0){
		$("input[name='_subDocumentId']","#"+formName).val(subDocumentId)
	}else{
		var subDocumentIdHTML="<input type='hidden' name='_subDocumentId' id='_subDocumentId' value='"+ subDocumentId+"'/>";
		$("#"+formName).append(subDocumentIdHTML);
	}
	if($("input[name='_stepId']","#"+formName).length!=0){
		$("input[name='_stepId']","#"+formName).val(stepId)
	}else{
		var stepIdHTML="<input type='hidden' name='_stepId' id='_stepId' value='"+stepId+"'/>";
		$("#"+formName).append(stepIdHTML);
	}
	if($("input[name='_stepCoverId']","#"+formName).length!=0){
		$("input[name='_stepCoverId']","#"+formName).val(stepCoveredId)
	}else{
		var stepCoverIdHTML="<input type='hidden' name='_stepCoverId' id='_stepCoverId' value='"+stepCoveredId+"'/>";
		$("#"+formName).append(stepCoverIdHTML);
	}
	$("input[name='methodName']","#"+formName).val(methodName);
	if(values!=null&&values!=""){
		var valueList=values.split(",");
	
		for(var i=0;i<valueList.length;i++){
			var attributes=valueList[i].split("=");
			var attributeHTML="<input type='hidden' name='"+attributes[0]+"' id='"+attributes[0]+"' value='"+ attributes[1]+"'/>";
			$("#"+formName).append(attributeHTML);
		}
	}
	$("#"+formName).attr("action", contextRoot + urlStr + "?"+csrfToken);
	if(isHandle=="false"){
		$("#"+formName).submit();
	}else{
		
		Controller.onSubmitWithCsrf(formName,csrfToken,methodName,null,null);
	}
	},
	onExit : function() {
		serverCallOn = false;
		$("#_progressBar").css("visibility","hidden").css("display","block");
		Util.clearObject(pageScope);
		Util.clearObject(multiPageScope);
		Util.clearContent($("#_content"));
		$(".subMenu").removeClass("subMenuSelected");
		if (opener!=null) window.close();
	},
	onSubmit : function(/*String*/ formId,/*Object*/ addlParams,/*String*/ methodName,/*String*/button,/*Function*/ callback) {
		/* 
		1. Does Ajax Submit from a Form (get or post depends on form.method.
		2. In the callback - reads the contentType, if it is text/json, calls passed handleDataFn (optional parameter).
		3. If contentType is text/html, then reads the status code of response object to decide whether to
			show message or referesh the content alltogether with new content. 
		*/
		if (!Util.assertNoServerCall()) return;
		//alert("formId="+formId);
		var formNode;
		if (formId==null) formNode = $("form[id!='dummyForm']");
		else formNode = $("#"+formId);
		//alert("formNode="+formNode[0]);
		var param = formNode.serialize();
		var multiParam = '';
		if (methodName!=null) {
			//alert("methodName="+methodName);	
			param+="&methodName="+methodName;
			multiParam ="methodName="+methodName;
		}
		if (typeof button!='undefined' && button!=null) {	
			param+="&button="+button;
			multiParam+="&button="+button;
		}
		if (addlParams!=null) {
			param+="&"+$.param(addlParams);
			multiParam+="&"+$.param(addlParams);
		}
		//alert("action="+formNode.attr("action"));
		//alert("param="+param);
		if (formNode.attr("enctype")=='multipart/form-data') {
			var newUrl = formNode.attr("action")+"?"+multiParam;
			//alert("newUrl="+newUrl);
			var options = { 
		        url:newUrl,type:formNode.attr("method"),timeout:6000
	    	}; 
	    	var jqForm = $(formNode,'#_content');
	    	//alert(newUrl+" "+options+" "+jqForm);
	    	jqForm.ajaxSubmit(options);
	    	
		} else {
			//alert("her123");

			if (formNode.attr("method")=='post') {
				$.post(formNode.attr("action"),param,callback);				
			}
			else if (formNode.attr("method")=='get') {
				$.get(formNode.attr("action"),param,callback);
			}
		}
		
	},
	onSubmitWithCsrf : function(/*String*/ formId,/*Object*/ addlParams,/*String*/ methodName,/*String*/button,/*Function*/ callback) {
		/* 
		1. Does Ajax Submit from a Form (get or post depends on form.method.
		2. In the callback - reads the contentType, if it is text/json, calls passed handleDataFn (optional parameter).
		3. If contentType is text/html, then reads the status code of response object to decide whether to
			show message or referesh the content alltogether with new content. 
		*/
		
		/* RICH TEXT EDITOR IMPLEMENTATION START */
		if(allRTEArray.length>0){
			
			$.each(allRTEArray, function( i, thisObj ){
			  //alert( "Index #" + i + ": " + thisObj);
			  thisObj.disable_design_mode(true);
			});
			
			allRTEArray=new Array();
		}
		
		
		/* RICH TEXT EDITOR IMPLEMENTATION END */
		
		if (!Util.assertNoServerCall()) return;
		log("formId="+formId);
		var formNode;
		if (formId==null) formNode = $("form[id!='dummyForm']");
		else formNode = $("#"+formId);
		//log("formNode="+formNode[0]);
		var param = formNode.serialize();
		var multiParam = '';
		if (methodName!=null) {
			log("methodName="+methodName);	
			param+="&methodName="+methodName;
			multiParam ="methodName="+methodName;
		}
		if (typeof button!='undefined' && button!=null) {	
			param+="&button="+button;
			multiParam+="&button="+button;
		}
		if (addlParams!=null) {
			param+="&"+$.param(addlParams);
			multiParam+="&"+addlParams;		
		}
		log("action="+formNode.attr("action"));
		log("param="+param);
		if (formNode.attr("enctype")=='multipart/form-data') {
			
			var newUrl = formNode.attr("action")+"?"+multiParam;
			var options = { 
		        url:newUrl,type:formNode.attr("method"),timeout:20000
	    	}; 
	    	var jqForm = $(formNode,'#_content');
	    	jqForm.ajaxSubmit(options);
	    	
		} else {
			if (formNode.attr("method")=='post') $.post(formNode.attr("action"),param,callback);
			else if (formNode.attr("method")=='get') $.get(formNode.attr("action"),param,callback);
		}
	},
	loadPage : function(/*String*/ urlStr,/*Object*/ input,/*Function*/ callback) {
		if (!Util.assertNoServerCall()) return;
		var data;
		if (input!=null && typeof input == 'string') {
			data = $.serialize(input);
		}
		else if (input!=null){
			data = $.param(input);
		}
		log("data="+data);
		
		$.post(urlStr, data, callback );
	},
	load: function(/*String*/ urlStr,/*Object*/ input,/*Function*/ callback) {
		if (!Util.assertNoServerCall()) return;
		var csrfEle = document.newLeftBarForm.OWASP_CSRFTOKEN;
		if(typeof csrfEle!='undefined'){
			var csrf = document.newLeftBarForm.OWASP_CSRFTOKEN.value;
			urlStr = contextRoot + urlStr + "&OWASP_CSRFTOKEN="+csrf;
		}else{
			urlStr = contextRoot + urlStr;
		}
		var data;
		if (input!=null && typeof input == 'string') {
			data = $.serialize(input);
		}
		else if (input!=null){
			data = $.param(input);
		}
		log("data="+data);
		//alert(urlStr);
		$.post(urlStr, data, callback );
	},	
	loadData : function(urlStr,input,callback) {
		
		if (!Util.assertNoServerCall()){
			alert("assertNoServerCall");
			return;
		}
		var data;
		if (input!=null && typeof input == 'string') {
			data = $.serialize(input);
		}
		else if (input!=null){
			data = $.param(input);
		}
		log("data="+data);
		
		$.post(urlStr, data, callback, "json" );
	},
	loadDataSynchronus : function(urlStr,input,callback) {
		
		if (!Util.assertNoServerCall()){
			alert("assertNoServerCall");
			return;
		}
		var data;
		if (input!=null && typeof input == 'string') {
			data = $.serialize(input);
		}
		else if (input!=null){
			data = $.param(input);
		}
		log("data="+data);
		$.ajax({
			  type: 'POST',
			  url: urlStr,
			  data: data,
			  success: callback,
			  dataType:  "json",
			  async:false
			});
	},
	onMenuLoad : function(/*int*/ docId,/*int*/ privilegeId) {
		sessionScope["_currDocId"] = docId;
		sessionScope["_currPrivId"] = privilegeId;
		$(".subMenu").removeClass("subMenuSelected");
		$("#subMenu_"+docId+"_"+privilegeId).addClass("subMenuSelected");
		Util.clearObject(multiPageScope);
	},
	setValueFromScope : function(/*Array*/ keys) {
		//log("setValueFromScope...."+multiPageScope["order.code"]);
		$.each(keys, function(index,key) {
			log("key = "+key);
			$("#"+key).value = multiPageScope[key];
		});
	},
	getBlankRows: function(/*String*/ endPattern) {
		var i= 0;
		$('input[id$="'+endPattern+'"]',$("form[id!='dummyForm']")).each(
			function() {
				if ($.trim(this.value)=='') i++; 
			}
		);
		//alert("Rows unchecked....."+i);
		return i;
	},
	alertSignHashFile:function(){
		//alert("alertSignHashFile");
		var fileExits=false;
		var pkiEnabled=$("#pkiEnabledOrg").val();
		
		if($( "input[type='file']" ).length>0){
			fileExits=true;
			//var index=$(this).index();
			//var signHash=$("input[name='"+elementName+"["+index+"].digitalCert.signHash'").val()
		}
		if(pkiEnabled=="true" && fileExits){
			return confirm("Please check that whether you have signed all files");
		}
		return true;
	},
	viewUserContact :function(userId) {
	
	document.viewUserContactForm.profileIdentity.value = userId;
	window.open('', 'userContactView_window', 'scrollbars=1, top=0, left=510, height=400, width=500, toolbar=no, status=no');
	document.viewUserContactForm.target="userContactView_window";
	document.viewUserContactForm.submit(); 
	},
	imposeMaxLength : function (Object, MaxLen)
	{
		//alert("Object..."+Object+"...MaxLen..."+MaxLen);
	  return (Object.value.length < MaxLen);
	},
	unescapeHtml: function (html) {      
    	var temp = document.createElement("div");       
    	temp.innerHTML = html;  
    	
    	if(temp.childNodes.length > 0){
    	
    		var result = temp.childNodes[0].nodeValue;       
    		temp.removeChild(temp.firstChild);      
    		return result; 
    	}
    },
     checkAll: function()
    {
    	if($("#selectAll").is(":checked") == true)
        {
        	$(".checkBoxClass").attr('checked',true);
        }
        else
        {
        	$(".checkBoxClass").attr('checked',false);
        }

    },

     chechkSelectAll: function(obj){
    	var flag=0;
    	if(obj.checked == false)
        { 
        	$("#selectAll").attr('checked',false);
        }
        else
        {
        	if ($('.checkBoxClass:checked').length == $('.checkBoxClass').length) {
    	       $("#selectAll").attr('checked',true);
    	    }
        	
    	}
    }
};

var SearchController = {
	/*
	formId : The id of the search input form.
	dynamicInputs : Array of ids of input element which will be changing during pev, next call. e.g pageNo,
	entityValId of the last fetched record.
	*/
	searchWithForm : function(/*String*/ formId,/*Array*/ dynamicInputs,/*String*/ resultDivId) {
		var form = $("#"+formId);
		SearchController.search(formId,form.attr("action"),form.serialize(),dynamicInputs,resultDivId);
	},
	search : function(/*String*/ searchName,/*String*/ urlStr,/*Object*/ input,/*Array*/ dynamicInputs,
					/*String*/ resultDivId) {
		log("ssss....search");			
		multiPageScope[searchName+"_dynamicInputs"] = dynamicInputs;
		if (resultDivId==null) {
			multiPageScope[searchName+"_resultDivId"] = "_content";
		}
		else {
			multiPageScope[searchName+"_resultDivId"] = resultDivId;
		}
		multiPageScope[searchName+"_resultCache"] = new Array();
		multiPageScope[searchName+"_inputCache"] = new Array();
		multiPageScope[searchName+"_url"] = urlStr;
		multiPageScope[searchName+"_input"] = input;
		log(input);
		Util.clearContent($('#_msgBox'));
		//log(multiPageScope[searchName+"_xhrArg"].data);
		SearchController.callServer(searchName,0,false);
	},
	prev : function(/*String*/ searchName) {
		var cache = multiPageScope[searchName+"_resultCache"];
		var curPageNo = multiPageScope[searchName+"_curPageNo"];
		var content = cache[curPageNo-1];
		if (content!=null) {			
			multiPageScope[searchName+"_curPageNo"]=curPageNo-1;
			$("#"+multiPageScope[searchName+"_resultDivId"]).empty().get(0).innerHTML=content;
			SearchController.enableDisablePrevNext(searchName);
			log("No Server call...");
		}
		else { 			
			log("Server Call............");
			SearchController.callServer(searchName,curPageNo,true);
		}
	},
	next : function(/*String*/ searchName) {
		var cache = multiPageScope[searchName+"_resultCache"];
		var curPageNo = multiPageScope[searchName+"_curPageNo"];
		var content = cache[curPageNo+1];
		if (content!=null) {			
			multiPageScope[searchName+"_curPageNo"]=curPageNo+1;
			$("#"+multiPageScope[searchName+"_resultDivId"]).empty().get(0).innerHTML=content;
			SearchController.enableDisablePrevNext(searchName);
			log("No Server call...");			
		}
		else {			
			log("Server Call............"); 
			SearchController.callServer(searchName,curPageNo,false);
		}
	},
	callServer: function(/*String*/ searchName,/*int*/ curPageNo,/*boolean*/ prev) {
	    if (!Util.assertNoServerCall()) return;
		var pageNo = 0;
		var inputCache = multiPageScope[searchName+"_inputCache"];
		if (prev) pageNo = curPageNo-1;
		else pageNo = curPageNo+1;
		log("pageNo="+pageNo);
		var dynInput = inputCache[pageNo-1];
		log("dynInput = "+dynInput);
		var xhrArg = {url: multiPageScope[searchName+"_url"], type:"POST"};
		var cache = multiPageScope[searchName+"_resultCache"];
		var data = multiPageScope[searchName+"_input"];		
		if (dynInput!=null) data += dynInput;
		data += "&pageNo="+pageNo;		
		if (pageNo>1) {
			data += "&totalPageNo="+encodeURIComponent($("#totalPageNo").val());
		}
		log("Final callParam="+data);
		xhrArg.data = data;
		xhrArg.success = function(/*Response*/ response,/*String*/ status) {
			multiPageScope[searchName+"_curPageNo"]=pageNo;
			if (cache.length>10) {
				cache.shift(); 
				//inputCache.shift(); 
			}	
			cache[pageNo]=response;
		};
		xhrArg.complete =function(/*XMLHttpRequest*/ request,/*String*/ status) {
			if (status!="success") return;
			log("xhrArg.complete........");
			var dynInput="";
			$.each(multiPageScope[searchName+"_dynamicInputs"],function(index,elemId) {
				var elem = $("#"+elemId);
				log("elem = "+elemId);
				if (elem!=null) dynInput+= "&"+encodeURIComponent(elemId)+"="+encodeURIComponent(elem.val());
			}); 
			inputCache[pageNo] = dynInput;
			log("inputCache["+pageNo+"]="+inputCache[pageNo]);
			SearchController.enableDisablePrevNext(searchName);
		};
		$.ajax(xhrArg);
	},
	
	gotoPrev : function(/*String*/ searchName, /*int*/ pageSize) {
		var cache = multiPageScope[searchName+"_resultCache"];
		var curPageNo = multiPageScope[searchName+"_curPageNo"];
		var content = cache[curPageNo-1];
		if (content!=null) {			
			multiPageScope[searchName+"_curPageNo"]=curPageNo-1;
			$("#"+multiPageScope[searchName+"_resultDivId"]).empty().get(0).innerHTML=content;
			SearchController.enableDisablePrevNext(searchName);
			log("No Server call...");
		}
		else { 			
			log("Server Call............");
			SearchController.callPreNxtServer(searchName, curPageNo, true, pageSize);
		}
	},
	
	gotoNext : function(/*String*/ searchName, /*int*/ pageSize) {
		var cache = multiPageScope[searchName+"_resultCache"];
		var curPageNo = multiPageScope[searchName+"_curPageNo"];
		var content = cache[curPageNo+1];
		if (content!=null) {			
			multiPageScope[searchName+"_curPageNo"]=curPageNo+1;
			$("#"+multiPageScope[searchName+"_resultDivId"]).empty().get(0).innerHTML=content;
			SearchController.enableDisablePrevNext(searchName);
			log("No Server call...");			
		}
		else {			
			log("Server Call............"); 
			SearchController.callPreNxtServer(searchName, curPageNo, false, pageSize);
		}
	},
	
	gotoPage : function(/*String*/ searchName, /*int*/ pageNo, /*int*/ pageSize) {
		var cache = multiPageScope[searchName+"_resultCache"];
		var curPageNo = multiPageScope[searchName+"_curPageNo"];		
		var lastId = (pageSize * (pageNo -1));
		var data = multiPageScope[searchName+"_input"];
		
		if(data.indexOf("&lastId") < 0){
			data = data +  "&lastId=" + lastId;
		}
		else{
			data = data.substring(0,data.indexOf("&lastId"));
			data = data + "&lastId=" + lastId;
		}
		
		multiPageScope[searchName+"_input"] = data;		
		var content = cache[pageNo];
		if (content!=null) {
			multiPageScope[searchName+"_curPageNo"] = pageNo;
			$("#"+multiPageScope[searchName+"_resultDivId"]).empty().get(0).innerHTML=content;
			SearchController.enableDisablePrevNext(searchName);
			log("No Server call...");
		}
		else {
			log("Server Call............"); 
			SearchController.gotoCallServer(searchName, pageNo, false);
		}
	},
	
	gotoCallServer: function(/*String*/ searchName,/*int*/ curPageNo,/*boolean*/ prev) {
	    if (!Util.assertNoServerCall()) return;
		var pageNo = 0;
		var inputCache = multiPageScope[searchName+"_inputCache"];
		if (prev) pageNo = parseInt(curPageNo,10)-1;
		else pageNo = parseInt(curPageNo,10);
		log("pageNo="+pageNo);
		var dynInput = inputCache[pageNo-1];
		log("dynInput = "+dynInput);
		var xhrArg = {url: multiPageScope[searchName+"_url"], type:"POST"};
		var cache = multiPageScope[searchName+"_resultCache"];
		var data = multiPageScope[searchName+"_input"];
		
		//if (dynInput!=null) data += dynInput;
		
		data += "&pageNo="+pageNo;		
		if (pageNo>1) {
			data += "&totalPageNo="+encodeURIComponent($("#totalPageNo").val());
		}
		log("Final callParam="+data);
		xhrArg.data = data;
		xhrArg.success = function(/*Response*/ response,/*String*/ status) {
			multiPageScope[searchName+"_curPageNo"] = pageNo;
			if (cache.length>10) {
				cache.shift(); 
				//inputCache.shift(); 
			}	
			cache[pageNo]=response;
		};
		xhrArg.complete =function(/*XMLHttpRequest*/ request,/*String*/ status) {
			if (status!="success") return;
			log("xhrArg.complete........");
			var dynInput="";
			$.each(multiPageScope[searchName+"_dynamicInputs"],function(index,elemId) {
				var elem = $("#"+elemId);
				log("elem = "+elemId);
				if (elem!=null) dynInput+= "&"+encodeURIComponent(elemId)+"="+encodeURIComponent(elem.val());
			}); 
			inputCache[pageNo] = dynInput;
			log("inputCache["+pageNo+"]="+inputCache[pageNo]);
			SearchController.enableDisablePrevNext(searchName);
		};
		$.ajax(xhrArg);
	},
	
	callPreNxtServer: function(/*String*/ searchName, /*int*/ curPageNo, /*boolean*/ prev, /*int*/ pageSize) {
	    if (!Util.assertNoServerCall()) return;
		var pageNo = 0;
		var inputCache = multiPageScope[searchName+"_inputCache"];
		if (prev) pageNo = parseInt(curPageNo,10)-1;
		else pageNo = parseInt(curPageNo,10)+1;
		log("pageNo="+pageNo);
		var dynInput = inputCache[pageNo-1];
		log("dynInput = "+dynInput);
		var xhrArg = {url: multiPageScope[searchName+"_url"], type:"POST"};
		var cache = multiPageScope[searchName+"_resultCache"];
		var data = multiPageScope[searchName+"_input"];		
		
		if(data.indexOf("&lastId") > 0){
			data = data.substring(0,data.indexOf("&lastId"));			
		}		
		
		if(dynInput!=null){
			data += dynInput;
		}
		else{
			data = data +  "&lastId=" + (pageSize * (pageNo -1));
		}
		
		data += "&pageNo="+pageNo;	
		
		if (pageNo>1) {
			data += "&totalPageNo="+encodeURIComponent($("#totalPageNo").val());
		}
		log("Final callParam="+data);
		xhrArg.data = data;
		xhrArg.success = function(/*Response*/ response,/*String*/ status) {
			multiPageScope[searchName+"_curPageNo"]=pageNo;
			if (cache.length>10) {
				cache.shift(); 
				//inputCache.shift(); 
			}	
			cache[pageNo]=response;
		};
		xhrArg.complete =function(/*XMLHttpRequest*/ request,/*String*/ status) {
			if (status!="success") return;
			log("xhrArg.complete........");
			var dynInput="";
			$.each(multiPageScope[searchName+"_dynamicInputs"],function(index,elemId) {
				var elem = $("#"+elemId);
				log("elem = "+elemId);
				if (elem!=null) dynInput+= "&"+encodeURIComponent(elemId)+"="+encodeURIComponent(elem.val());
			}); 
			inputCache[pageNo] = dynInput;
			log("inputCache["+pageNo+"]="+inputCache[pageNo]);
			SearchController.enableDisablePrevNext(searchName);
		};
		$.ajax(xhrArg);
	},
		
	enableDisablePrevNext: function(/*String*/ searchName) {
	  	var curPageNo = multiPageScope[searchName+"_curPageNo"];
		var totalPageNo = $("#totalPageNo").val();
		//log("totalPageNo="+totalPageNo);
		if (curPageNo>1) $("#"+searchName+"Prev").css("display","inline");
		else $("#"+searchName+"Prev").css("display","none");
		if (curPageNo<totalPageNo) $("#"+searchName+"Next").css("display","inline");
		else $("#"+searchName+"Next").css("display","none");
	},
	
//----------------------------------for jump search----------------------------------------
searchWithFormWithJump : function(/*String*/ formId,/*Array*/ dynamicInputs,/*String*/ resultDivId) {
        if(dynamicInputs == 'go')
		{
		    var goVal =  document.getElementById('reqPageNum').value;
		    if(!Util.IsInteger(goVal)){
		    alert("Page number should be numeric");
		    return;
		    }
			if(null!=document.getElementById('totalPageNo')){
					if(parseFloat(document.getElementById('totalPageNo').value)== 0){
						alert("Please search some data before going to a particular page");
						return;
						}
			}	
			else {
				alert("Please search some data before going to a particular page"); 
				return;
			}				
		}
		else 
			if(null != document.getElementById('reqPageNum'))
			{
				document.getElementById('reqPageNum').value = '';
			}
			
		var form = $("#"+formId);
		SearchController.searchWithJump(formId,form.attr("action"),form.serialize(),dynamicInputs,resultDivId);
	},
	searchWithJump : function(/*String*/ searchName,/*String*/ urlStr,/*Object*/ input,/*Array*/ dynamicInputs,
					/*String*/ resultDivId) {
		
						
		multiPageScope[searchName+"_dynamicInputs"] = dynamicInputs;
		if (resultDivId==null) {
			multiPageScope[searchName+"_resultDivId"] = "_content";
		}
		else {
			multiPageScope[searchName+"_resultDivId"] = resultDivId;
		}
		
			multiPageScope[searchName+"_resultCache"] = new Array();
			multiPageScope[searchName+"_inputCache"] = new Array();
			multiPageScope[searchName+"_url"] = urlStr;
			if(dynamicInputs == 'go'){
				multiPageScope[searchName+"_input"] = multiPageScope[searchName+"_input"].replace("&reqPageNum=","&reqPageNum=1");
			}
			else{
				multiPageScope[searchName+"_input"] = input.replace("&reqPageNum=[0-9]+","&reqPageNum=");
				multiPageScope[searchName+"_input"] = multiPageScope[searchName+"_input"].replace("&totalPageNo=[0-9]+","&reqPageNum=");
			}
				
		SearchController.callServerWithJump(searchName,0,false);
		
		if(null != document.getElementById('reqPageNum'))
		{
			$("#reqPageNum").removeAttr('readonly');
		}
	},
	prevWithJump : function(/*String*/ searchName) {
		if(null != document.getElementById('reqPageNum'))
		{
			document.getElementById('reqPageNum').value = '';
		}
		var cache = multiPageScope[searchName+"_resultCache"];
		var curPageNo = multiPageScope[searchName+"_curPageNo"];
		var content = cache[curPageNo-1];
		if (content!=null) {
			multiPageScope[searchName+"_curPageNo"]=curPageNo-1;
			$("#"+multiPageScope[searchName+"_resultDivId"]).empty().get(0).innerHTML=content;
			SearchController.enableDisablePrevNext(searchName);
			log("No Server call...");
		}
		else { 
			log("Server Call............");
			SearchController.callServerWithJump(searchName,curPageNo,true);
		}
	},
	nextWithJump : function(/*String*/ searchName) {
	    if(null != document.getElementById('reqPageNum'))
		{
			document.getElementById('reqPageNum').value = '';
		} 
		var cache = multiPageScope[searchName+"_resultCache"];
		var curPageNo = multiPageScope[searchName+"_curPageNo"];
		var content = cache[curPageNo+1];
		if (content!=null) {
			multiPageScope[searchName+"_curPageNo"]=curPageNo+1;
			$("#"+multiPageScope[searchName+"_resultDivId"]).empty().get(0).innerHTML=content;
			SearchController.enableDisablePrevNext(searchName);
		}
		else {
			SearchController.callServerWithJump(searchName,curPageNo,false);
		}
	},
	callServerWithJump: function(/*String*/ searchName,/*int*/ curPageNo,/*boolean*/ prev) {
	    if (!Util.assertNoServerCall()) return;
		var pageNo = 0;
		var jumpFlag = 'N';
		if(null != document.getElementById('reqPageNum'))
		{
			if('' != document.getElementById('reqPageNum').value)
			{
				pageNo = parseFloat(document.getElementById('reqPageNum').value);
				jumpFlag = 'Y';
			}
		}
		
		var inputCache = multiPageScope[searchName+"_inputCache"];
		if(jumpFlag == 'N'){
			if (prev) pageNo = curPageNo-1;
			else pageNo = curPageNo+1;
			}
		log("pageNo="+pageNo);
		var dynInput = inputCache[pageNo-1];
		log("dynInput = "+dynInput);
		var xhrArg = {url: multiPageScope[searchName+"_url"], type:"POST"};
		var cache = multiPageScope[searchName+"_resultCache"];
		var data = multiPageScope[searchName+"_input"];
		if (dynInput!=null) data += dynInput;
		data += "&pageNo="+pageNo;
		if(jumpFlag == 'N')
		{
			if (pageNo>1) {
				data += "&totalPageNo="+encodeURIComponent($("#totalPageNo").val());
			}
			else 
				if(null!=document.getElementById('totalPageNo')){
					if(parseFloat(document.getElementById('totalPageNo').value)!=0)
					 data += "&totalPageNo="+encodeURIComponent($("#totalPageNo").val());
				}
		}
		else data += "&totalPageNo="+encodeURIComponent($("#totalPageNo").val());
		var re = new RegExp("&reqPageNum=[0-9]+");
		var data = data.replace(re,"&reqPageNum="+pageNo);
		
		log("Final callParam="+data);
		xhrArg.data = data;
		xhrArg.success = function(/*Response*/ response,/*String*/ status) {
			multiPageScope[searchName+"_curPageNo"]=pageNo;
			if (cache.length>10) {
				cache.shift(); 
				//inputCache.shift(); 
			}	
			cache[pageNo]=response;
		};
		xhrArg.complete =function(/*XMLHttpRequest*/ request,/*String*/ status) {
			if (status!="success") return;
			log("xhrArg.complete........");
			var dynInput="";
			$.each(multiPageScope[searchName+"_dynamicInputs"],function(index,elemId) {
				var elem = $("#"+elemId);
				log("elem = "+elemId);
				if (elem!=null) dynInput+= "&"+encodeURIComponent(elemId)+"="+encodeURIComponent(elem.val());
			}); 
			inputCache[pageNo] = dynInput;
			log("inputCache["+pageNo+"]="+inputCache[pageNo]);
			SearchController.enableDisablePrevNext(searchName);
		}
		$.ajax(xhrArg);
	},
	showHideDiv: function(/*String*/ showDiv,/*String*/ hideDiv, /*String*/ clearDiv) {
		document.getElementById(showDiv).style.display = 'block';
	    document.getElementById(hideDiv).style.display = 'none';
	    document.getElementById(clearDiv).innerHTML = "";
	}
	
//-----------------------------------for jump search--------------------------------------
};
$(document).ready(function(){
	//Setup "_content" div for ajax success  
	$("body").ajaxSuccess(function(/*Event*/ evt, /*XMLHttpRequest*/ request, /*Options with which request was called*/ settings){
		//alert("ajaxSuccess");
		//log("AJAX Success.....");
		//alert("in org ajax")
		//alert("AJAX Success.....1");
		if(null!=request.getResponseHeader("content-type")) {
			if (request.getResponseHeader("content-type").indexOf('application/json')>=0) {
				log('Content type is json');
				return;
			}
		}
		
		var containerId = request.getResponseHeader("_containerId");
		//alert("AJAX Success.....2 - with _containerId="+containerId);
		log("containerId="+containerId);
   		if (containerId=='_msgBox'){
   			if ($("#_msgBox").length==0) $("#_content").prepend('<DIV id="_msgBox" class="msgBox"></DIV>');
			$("#_msgBox").empty().show().eq(0).html(request.responseText);
			var disableIndicator = request.getResponseHeader("_disable");
			if (disableIndicator=='disable') Util.disableForm();
			return;
		}
   		if (containerId==null||document.getElementById(containerId)==null) {  
			containerId='_content';
		}
   		log("containerId after="+containerId);
		//alert("AJAX Success.....3 after NULL _containerId="+containerId);
   		var content = $("#"+containerId);
   		
		if (containerId=='_content') {
			//alert (" request.responseText = " + request.responseText);
			log("destroying pageScope...."+request.responseText);
			Util.clearObject(pageScope);
			Util.clearContent(content).get(0).innerHTML=request.responseText;
			var count = 0;
			$("#_content").find(".epsTable tr").each(function(index,domEle){
				
				$(domEle).addClass(count++ % 2 == 0 ? 'odd' : 'even');
			});
			//Decorate the Buttons in the form
			$("button[id='_exit']",content).click(Controller.onExit);
			//$("button:not([onclick]),button[id]",content).click(function(){
			log("Will be decorated...");
			$("button:not([onclick])",content).each(function(){log(this.id+",")});
			$("button:not([onclick])",content).each(function(){
				//Get the method name from Id and Call onSubmit
				if (this.id=='_exit') return;
				log("Decorated ...."+this.id);
				var strArr = this.id.split("."); 
				this.onclick = function() {
					Controller.onSubmit(null,null,strArr[0],strArr[1],null);
				}
			});
			
			$(":text").keypress(function (evt){
				if(evt.keyCode == 13 || evt.which == 13)
				{
					return false;
				}
				return true;
			});
		}
		else {

			Util.clearContent(content).get(0).innerHTML=request.responseText;

		}
		//alert($( ".combobox" ));
		if($( ".combobox" ).length>0){
			$( ".combobox" ).combobox();
			$( ".combobox" ).hide(); 
		}
		
		/*  TREE VIEW BLOCK START  */
		
		if($("#tree" ).length>0)
		{
			$("#tree").treeview({
				collapsed: false,
				animated: "medium",
				control:"#sidetreecontrol",
				persist: "location"
			});
		}
		
		/*  TREE VIEW BLOCK END  */
		
		/*  SUPPLIER ACTIVATION VIEW  */
		if($("#supplierDataTable" ).length > 0)
		{
			$("#supplierDataTable").dataTable({
				"sPaginationType": "full_numbers"
				
			});
		}
		/*  SUPPLIER ACTIVATION VIEW  */
		
		
		
		/*  ADD PLANTS VIEW  */
		if($("#locationList" ).length > 0)
		{
			$("#locationList").dataTable({
				"sPaginationType": "full_numbers"
				
			});
		}
		/*  ADD PLANTS VIEW  */
		
		
		/*  DYNAMIC TEMPLATE VIEW  */
		
		if($("#templateDataTable" ).length>0)
		{
			$("#templateDataTable").dataTable({
				"sPaginationType": "full_numbers"
				
			});
		}
				
		if($("#searchTemplateAttributeBlockTab" ).length>0)
		{
			$("#searchTemplateAttributeBlockTab").dataTable({
				"sPaginationType": "full_numbers"
				
			});
		}
		/* DYNAMIC TEMPLATE VIEW  */
		
		/* ITEM SEARCH BY CODE */
		if($("#searchItemCodeBlockTab" ).length > 0)
		{
			$("#searchItemCodeBlockTab").dataTable({
				"sPaginationType": "full_numbers"
				
			});
		}
		/* ITEM SEARCH BY CODE */
		
		/*     RICH TEXT EDITOR INIT    */
		if($('.rte1').length>0 && allRTEArray.length==0){	
			allRTEArray=$('.rte1').rte({
				controls_rte: rte_toolbar,
				controls_html: html_toolbar
			});
		}
		/*     RICH TEXT EDITOR INIT    */
		/*     ZEBRA DATE PICKER INIT    */
	
		if($('.zebraDatePicker').length>0){	
			
			$('.zebraDatePicker').Zebra_DatePicker({view: 'years'});
		}
		/*     ZEBRA DATE PICKER INIT    */
		
		/* Hide Display Table and only show export buttons*/
		/* Use the class name*/
	 	$('.hideDisplayTable').attr("style","display:none;");
	 	/* Hide Display Table and only show export buttons*/
	 	
	 	/*  Question Group List VIEW  */
		if($("#questionGroupList" ).length > 0)
		{
			$("#questionGroupList").dataTable({
				"sPaginationType": "full_numbers",
				"fnDrawCallback": function ( oSettings ) {
					$("td .sorting_1").css("background-color", "white");
				 }
			});
			/*window.onload = (function(){*/ 
			$('#description').keyup(function(){
				limitChar('description', 100, 'charLeft');
			});
		/*});*/
		}
		/*  Question Group List VIEW  */ 
		
		/*  Question List VIEW  */
		if($("#questionList" ).length > 0)
		{
			$("#questionList").dataTable({
				"sPaginationType": "full_numbers",
				"fnDrawCallback": function ( oSettings ) {
					$("td .sorting_1").css("background-color", "white");
				 }
				
			});
		}
		/*  Question List VIEW  */
		
		/*  Question Template List VIEW  */
		if($("#quesTemplateList" ).length > 0)
		{
			$("#quesTemplateList").dataTable({
				"sPaginationType": "full_numbers",
				"fnDrawCallback": function ( oSettings ) {
					$("td .sorting_1").css("background-color", "white");
				 }
				
			});
		}
		/*  Question Template List VIEW  */
	 	
		
 	});
 	$("body").ajaxError(function(event, request, settings){
 		//alert("ajaxError");
   		log("Error Occured....."+request.status);
  		//alert ("request.status=" + request.status);
   		if(request.status == 400||request.status ==408||request.status == 500) {
   			top.location.href = contextRoot+"/security/getSignInAction.do?relogin=true";
   			return;
   		}
   		if ($("#_msgBox").length==0) {
			$("#_content").prepend('<DIV id="_msgBox" class="msgBox"></DIV>');
		}
		$("#_msgBox").empty().show().get(0).innerHTML='<img src="../image/error.jpg"> Generic Error...'+request.status;
 	});
 	$("body").ajaxStart(function(event, request, settings){
   		serverCallOn = true;
   		//alert("in start");
   		if($("#discussionDiv").length==0){	
   		$("#_progressBar").css("visibility","visible").css("display","block");
   			window.scrollTo(0,0);
   		}
	});
	$("body").ajaxStop(function(event, request, settings){
		//alert("in stop");
   		serverCallOn = false;
		$("#_progressBar").css("visibility","hidden").css("display","none");
		if($("#orderAddPage" ).length > 0) 
		{
			if($("#timeLeft" ).length > 0){
				clearTimeout(timer);
				$("#timeLeft" ).html("");
			}
			var csrfToken=$("#csrfTokenName").val();
			doTimerOrder(csrfToken);
		}
	});
});

