/*

Name 		: 	dynamicFormTemplate.js
Author		:	Priyam Chatterjee
Date		:	08/04/2014
Description	:	File contains all the js functions for dynamic rfq form template implementation

*/

function submitDynamicRfqTemplateFormForPreview(templateFormId,csrfToken)
{
	//alert(templateFormId);
	document.getElementById("previewTemplateId").value=templateFormId;
	Controller.onSubmitWithCsrf('previewTemplateForm', csrfToken,'getDynamicFormTemplateBuyerPreview','NEXT',null);
}

function submitDynamicRfqTemplateForm(csrfToken, buttonVal)
{
	var methodName=document.getElementById("methodName").value;
	document.getElementById("buttonValue").value=buttonVal;
	Controller.onSubmitWithCsrf('templateForm', csrfToken, methodName, buttonVal, null);
	
}

function addBuyerViewRow()
{
	//alert("123");
	
	//var thisRowIndex=$('#buyerColumnAttrValCount').val();
	
	$trLast = $('#buyerTab1').find("tr:nth-child(2)"),
    $trNew = $trLast.clone();
	
	var rowCount= $('#buyerTab1').find("tr").length;
	var thisRowIndex=rowCount;
	//alert(rowCount);
	
	//thisRowIndex=rowCount;
	
	$trNew.attr('id','buyerTabTr'+thisRowIndex);
	$trNew.find(':text').val('');
	
	$trNew.find('.Zebra_DatePicker_Icon_Wrapper').attr('class','');
	$trNew.find('span').attr('style','');
	$trNew.find('button').remove();
	$trNew.find('[class*="zebraDatePicker"]').attr('class','zebraDatePicker'+rowCount);
	
	$trNew.find('input').each(function(index) {
	    
		var thisId=this.id;
	    var newId=thisId.replace('formAttrValList[0]','formAttrValList['+thisRowIndex+']');
	    this.id=newId;
	    this.name=newId;
	    
	});
	
	
	$trNew.find('a').attr('href','javascript:deleteBuyerViewRow('+thisRowIndex+');');
	$trNew.find('a').html('Delete');
	
	
	$('#buyerTab1').find("tr:last").after($trNew);
	$('.zebraDatePicker'+rowCount).Zebra_DatePicker({view: 'years'});
	$('#buyerColumnAttrValCount').val(rowCount);
	
	
}


function deleteBuyerViewRow(rowIndex)
{
	//alert(rowIndex);
	var r = confirm("Are you sure you want to delete ??");
	if(r == true)	$('#buyerTabTr'+rowIndex).remove();
 
	
}


function addSupplierViewRow()
{
	//alert("123");
	
	var thisRowIndex=$('#supplierColumnAttrValCount').val();
	
	$trLast = $('#supplierTab1').find("tr:nth-child(2)"),
    $trNew = $trLast.clone();
	
	var rowCount= $('#supplierTab1').find("tr").length;
	//alert(rowCount);
	var thisRowIndex=rowCount;
	
	//thisRowIndex=rowCount;
	
	$trNew.attr('id','supplierTabTr'+thisRowIndex);
	$trNew.find(':text').val('');
	
	$trNew.find('.Zebra_DatePicker_Icon_Wrapper').attr('class','');
	$trNew.find('span').attr('style','');
	$trNew.find('button').remove();
	$trNew.find('[class*="zebraDatePicker"]').attr('class','zebraDatePicker'+rowCount);
	
	$trNew.find('input').each(function(index) {
	    
		var thisId=this.id;
	    var newId=thisId.replace('formAttrValList[0]','formAttrValList['+thisRowIndex+']');
	    this.id=newId;
	    this.name=newId;
	    
	});
	
	
	$trNew.find('a').attr('href','javascript:deleteSupplierViewRow('+thisRowIndex+');');
	$trNew.find('a').html('Delete');
	
	
	$('#supplierTab1').find("tr:last").after($trNew);
	$('.zebraDatePicker'+rowCount).Zebra_DatePicker({view: 'years'});
	$('#supplierColumnAttrValCount').val(rowCount);
	
	
}


function deleteSupplierViewRow(rowIndex)
{
	//alert(rowIndex);
	var r = confirm("Are you sure you want to delete ??");
	if(r == true)	$('#supplierTabTr'+rowIndex).remove();
 
	
}


function alertOpen()
{
	//alert("vv");
	alertify.alert("This is an alert dialog");
	
	//return false;
}

function replaceAllString(originalString, oldString, newString)
{
	while(originalString.indexOf(oldString)!=-1){
		originalString=originalString.replace(oldString, newString);
	}
	
	return originalString;
}


function applyBuyerRfqForm()
{
	/*************************************  VALIDATION  ****************************************/
	
	var allValidationExpressionValString=document.getElementById("allValidationExpressionValString").value;
	//alert(allValidationExpressionValString);
	
	var validationObjArray=eval(allValidationExpressionValString);
	
	//alert(validationObjArray);
	//alert(validationObjArray.length);
	
	var allValidationMsgArray=new Array();
	
	for(var i=0;i<validationObjArray.length;i++)
	{
		var thisValObj=validationObjArray[i];
		var thisFormTempattId=thisValObj.formTempattId;
		var expValidation=thisValObj.expression;
		var inputList = thisValObj.input.split(",");
		var validationMsg=thisValObj.message;
		
		//alert(thisFormTempattId+" : "+expValidation);
		
		
		var inputIndexArray=new Array(); 
		var inputExpValidationArray=new Array(); 
		var inputMessageArray=new Array();
		
		//alert(inputList.length);
		
		for(var k=0;k<inputList.length;k++)
		{
			$("[value='"+inputList[k]+"'][name$='formTempattId']").each(function(x) {
				
				//alert(this.id);
				var thisId=this.id;
				var thisIndex=thisId.substring(thisId.lastIndexOf("[")+1,thisId.lastIndexOf("]"));
								
				var thisEnteredValId=this.id.replace("formTempattId","attEnteredVal");
				var thisEnteredVal=document.getElementById(thisEnteredValId).value;
				//alert(thisEnteredVal);
				
				var thisExpValidation="";
				var validationIndex=inputExpValidationArray.length;
				if(jQuery.inArray(thisIndex, inputIndexArray)==-1){
					inputIndexArray[inputIndexArray.length]=thisIndex;
					thisExpValidation=expValidation;
					inputMessageArray[inputMessageArray.length]=validationMsg;
				}
				else
				{
					thisExpValidation=inputExpValidationArray[jQuery.inArray(thisIndex, inputIndexArray)];
					validationIndex=jQuery.inArray(thisIndex, inputIndexArray);
				}
				
				thisExpValidation=thisExpValidation.replace("{"+inputList[k]+"}", thisEnteredVal);
				inputExpValidationArray[validationIndex]=thisExpValidation;
				
				//alert(thisExpValidation);
				  
			});
			
			
		}
		
		//alert(thisFormTempattId);
		//alert(inputIndexArray);
		
		$("[value='"+thisFormTempattId+"'][name$='formTempattId']").each(function(i) {
			
			var thisId=this.id;
			var thisIndex=thisId.substring(thisId.lastIndexOf("[")+1,thisId.lastIndexOf("]"));
			//alert("resultIndex : "+thisIndex);
			
			var thisEnteredValId=this.id.replace("formTempattId","attEnteredVal");
			var thisEnteredVal=document.getElementById(thisEnteredValId).value;
			
			var thisExpValidation=inputExpValidationArray[0];
			var thisValidationMsg=inputMessageArray[0];
			if(inputIndexArray.length>1){
				//alert("if");
				thisExpValidation=inputExpValidationArray[jQuery.inArray(thisIndex, inputIndexArray)];
				thisValidationMsg=inputMessageArray[jQuery.inArray(thisIndex, inputIndexArray)];
			}
			
			//alert("n : "+thisFormTempattId);
					
			//thisExpValidation=thisExpValidation.replace("{"+thisFormTempattId+"}", thisEnteredVal);
			
			//alert(thisExpValidation);
			
			var oldString="{"+thisFormTempattId+"}";
			thisExpValidation=replaceAllString(thisExpValidation,oldString,thisEnteredVal);
			
			//alert("1 : " +thisExpValidation);
			
			
			
			thisExpValidation=replaceAllString(thisExpValidation,"|","'");
			
			//alert(thisExpValidation);
			var thisValidationFlag=eval(thisExpValidation);
			//alert(thisFormTempattId+" : "+thisValidationFlag);
			
			if(thisValidationFlag){
				allValidationMsgArray[allValidationMsgArray.length]=thisValidationMsg;
			}
			
			
		});
		
		//alert("2 : "+thisFormTempattId);
		
	}
	
	if(allValidationMsgArray.length>0){
		var validationMsgString=allValidationMsgArray.join("\n");
		alert(validationMsgString);
	}
	
	
	//validationMsg
	
	/*************************************  EXPRESSION  ****************************************/
	
	/*   APPLY COMPUTED ATTRIBUTES VAL START  */
	
	
	var allExpressionVal=document.getElementById("test_field").value;
	//alert(allExpressionVal);
	
	var expressionObjArray=eval(allExpressionVal);
	
	
	for(var i=0;i<expressionObjArray.length;i++)
	{
		var thisExpObj=expressionObjArray[i];
		var thisFormTempattId=thisExpObj.formTempattId;
		var thisExpressionType=thisExpObj.formExpressionType;
		var inputList = thisExpObj.exp_input.split(",");
		
		if(thisExpressionType==1)
		{
		
			/*    EXPRESSION TYPE 1 START     */
		
			var expFormula=thisExpObj.exp_formula;
					
			var inputIndexArray=new Array(); 
			var inputExpFormulaArray=new Array(); 
			
			for(var k=0;k<inputList.length;k++)
			{
				$("[value='"+inputList[k]+"'][name$='formTempattId']").each(function(x) {
					
					//alert(this.id);
					var thisId=this.id;
					var thisIndex=thisId.substring(thisId.lastIndexOf("[")+1,thisId.lastIndexOf("]"));
					//alert(thisIndex);
					
					var thisEnteredValId=this.id.replace("formTempattId","attEnteredVal");
					var thisEnteredVal=document.getElementById(thisEnteredValId).value;
					//alert(thisEnteredVal);
					
					var formulaIndex=inputExpFormulaArray.length;
					if(jQuery.inArray(thisIndex, inputIndexArray)==-1){
						inputIndexArray[inputIndexArray.length]=thisIndex;
						thisExpFormula=expFormula;
					}
					else
					{
						 thisExpFormula=inputExpFormulaArray[jQuery.inArray(thisIndex, inputIndexArray)];
						 formulaIndex=jQuery.inArray(thisIndex, inputIndexArray);
						 
					}
					
					thisExpFormula=thisExpFormula.replace("{"+inputList[k]+"}", thisEnteredVal);
					inputExpFormulaArray[formulaIndex]=thisExpFormula;
					
					
					  
				});
				
				
			}
			
			$("[value='"+thisFormTempattId+"'][name$='formTempattId']").each(function(i) {
				
				var thisId=this.id;
				var thisIndex=thisId.substring(thisId.lastIndexOf("[")+1,thisId.lastIndexOf("]"));
				//alert("resultIndex : "+thisIndex);
				
				var thisEnteredValId=this.id.replace("formTempattId","attEnteredVal");
				document.getElementById(thisEnteredValId).value=eval(inputExpFormulaArray[jQuery.inArray(thisIndex, inputIndexArray)]).toFixed(2);
				
			});
			
			
			/*    EXPRESSION TYPE 1 END    */
		
		}
		
		
		
		if(thisExpressionType==2)
		{
		
			/*    EXPRESSION TYPE 2 START     */
			
			var thisStartDate=thisExpObj.start_date;
			var thisEndDate=thisExpObj.end_date;
			var thisExpVal=thisExpObj.exp_val;
			
			var conditionValIndexArray=new Array();
			var thisConditionVal=thisExpObj.condition_val;
			
			var inputIndexArray=new Array();
			var startDateArray=new Array();
			var endDateArray=new Array();
			var expValArray=new Array();
			var conditionComputedValArray=new Array();
			
			
			/*   start_date BEGIN   */
			
			$("[value='"+thisStartDate+"'][name$='formTempattId']").each(function(x) {
				
				//alert(this.id);
				var thisId=this.id;
				var thisIndex=thisId.substring(thisId.lastIndexOf("[")+1,thisId.lastIndexOf("]"));
				//alert(thisIndex);
				
				var thisEnteredValId=this.id.replace("formTempattId","attEnteredVal");
				var thisEnteredVal=document.getElementById(thisEnteredValId).value;
				//alert(thisEnteredVal);
							
				if(jQuery.inArray(thisIndex, inputIndexArray)==-1){
					inputIndexArray[inputIndexArray.length]=thisIndex;
				}
				
				startDateArray[startDateArray.length]=thisEnteredVal;
				
			});
			
			/*   start_date END   */
			
						
			/*   end_date BEGIN   */
			
			$("[value='"+thisEndDate+"'][name$='formTempattId']").each(function(x) {
				
				var thisEnteredValId=this.id.replace("formTempattId","attEnteredVal");
				var thisEnteredVal=document.getElementById(thisEnteredValId).value;
				//alert(thisEnteredVal);
				endDateArray[endDateArray.length]=thisEnteredVal;
				
			});
			
			/*   end_date END    */
			
			
			/*   exp_val BEGIN   */
			
			$("[value='"+thisExpVal+"'][name$='formTempattId']").each(function(x) {
				
				var thisEnteredValId=this.id.replace("formTempattId","attEnteredVal");
				var thisEnteredVal=document.getElementById(thisEnteredValId).value;
				//alert(thisEnteredVal);
				expValArray[expValArray.length]=thisEnteredVal;
				
			});
			
			/*   exp_val END     */
			
						
			$("[value='"+thisConditionVal+"'][name$='formTempattId']").each(function(x) {
				
				//alert(this.id);
				var thisId=this.id;
				var thisIndex=thisId.substring(thisId.lastIndexOf("[")+1,thisId.lastIndexOf("]"));
				//alert(thisIndex);
				
				var thisEnteredValId=this.id.replace("formTempattId","attEnteredVal");
				var thisEnteredVal=document.getElementById(thisEnteredValId).value;
				//alert(thisEnteredVal);
							
				if(jQuery.inArray(thisIndex, conditionValIndexArray)==-1){
					conditionValIndexArray[conditionValIndexArray.length]=thisIndex;
				}
				
				var thisComputedVal=100;
				
				/*calculate the val here */
				
				 /*  var inputIndexArray=new Array();
				    var startDateArray=new Array();
					var endDateArray=new Array();
					var expValArray=new Array();
				 */
				
				/*alert("start date : "+startDateArray);
				alert("end date : "+endDateArray);
				alert("exp val : "+expValArray);*/
				
				for(var x=0;x<inputIndexArray.length;x++)
				{
					var thisStartDate=startDateArray[x];
					var thisEndDate=endDateArray[x];
					var thisExpVal=expValArray[x];
					
					if(thisEnteredVal>=thisStartDate && thisEnteredVal<=thisEndDate){
						thisComputedVal=thisExpVal;
						//alert(thisComputedVal);
						break;
					}
					
				}
				
				
				conditionComputedValArray[conditionComputedValArray.length]=thisComputedVal;
				
			});
			
			
			$("[value='"+thisFormTempattId+"'][name$='formTempattId']").each(function(i) {
				
				var thisId=this.id;
				var thisIndex=thisId.substring(thisId.lastIndexOf("[")+1,thisId.lastIndexOf("]"));
				//alert("resultIndex : "+thisIndex);
				
				var thisEnteredValId=this.id.replace("formTempattId","attEnteredVal");
				document.getElementById(thisEnteredValId).value=eval(conditionComputedValArray[jQuery.inArray(thisIndex, conditionValIndexArray)]).toFixed(2);
				
			});
			
			
			
			/*    EXPRESSION TYPE 2 END    */
		}
		
	
	}
	
	
	/*   APPLY COMPUTED ATTRIBUTES VAL END   */
	
	
	/*************************************  TOTAL  ****************************************/
	
	/*   APPLY TOTAL START HERE  */
	
	var allTotalString=document.getElementById("allTotalString").value;
	//alert(allTotalString);
	
	var totalAttrArray=new Array();
	totalAttrArray=allTotalString.split("|");
	
	//alert(totalAttrArray+" : "+totalAttrArray.length);
	
	for(var i=0;i<totalAttrArray.length;i++)
	{
		//alert(totalAttrArray[i]);
		var thisTotalVarArray=new Array();
		thisTotalVarArray=totalAttrArray[i].split(",");
		
		var thisFormTempattId=thisTotalVarArray[0];
		var thisRelatedFormTempattId=thisTotalVarArray[1];
		
		var thisTotalVal=0;
		$("[value='"+thisRelatedFormTempattId+"'][name$='formTempattId']").each(function(i) {
			
			var thisId=this.id;
			var thisEnteredValId=this.id.replace("formTempattId","attEnteredVal");
			var thisEnteredVal=document.getElementById(thisEnteredValId).value;
			
			thisTotalVal+=parseFloat(thisEnteredVal);
		});
		
		
		$("[value='"+thisFormTempattId+"'][name$='formTempattId']").each(function(i) {
			
			var thisId=this.id;
			var thisEnteredValId=this.id.replace("formTempattId","attEnteredVal");
			document.getElementById(thisEnteredValId).value=thisTotalVal.toFixed(2);
						
		});
		
		
	}
	
	
	
	
	/*  APPLY TOTAL END HERE    */
	
	
	/*************************************  CONFIRMATION RULES  ****************************************/
	
	
	/*   APPLY CONFIRMATION START HERE  */
	
	if($('#allConfirmExpressionString').length>0)
	{
		
		var confirmationFlag=true;
		var allConfirmExpressionString=document.getElementById("allConfirmExpressionString").value;
		//alert(allConfirmExpressionString);
		
		var confirmationObjArray=eval(allConfirmExpressionString);
		
		//alert(confirmationObjArray);
		//alert(confirmationObjArray.length);
		
		var confirmationMsgArray=new Array();
		
		
		for(var i=0;i<confirmationObjArray.length;i++)
		{
			var thisRuleObj=confirmationObjArray[i];
			var expValidation=thisRuleObj.expression;
			var inputList = thisRuleObj.input.split(",");
			var validationMsg=thisRuleObj.message;
			
			var inputIndexArray=new Array(); 
			var inputExpValidationArray=new Array(); 
			var inputMessageArray=new Array();
			
			//alert(inputList.length);
			
			for(var k=0;k<inputList.length;k++)
			{
				$("[value='"+inputList[k]+"'][name$='formTempattId']").each(function(x) {
					
					//alert(this.id);
					var thisId=this.id;
					var thisIndex=thisId.substring(thisId.lastIndexOf("[")+1,thisId.lastIndexOf("]"));
									
					var thisEnteredValId=this.id.replace("formTempattId","attEnteredVal");
					var thisEnteredVal=document.getElementById(thisEnteredValId).value;
					//alert(thisEnteredVal);
					
					var thisExpValidation="";
					var validationIndex=inputExpValidationArray.length;
					if(jQuery.inArray(thisIndex, inputIndexArray)==-1){
						inputIndexArray[inputIndexArray.length]=thisIndex;
						thisExpValidation=expValidation;
						inputMessageArray[inputMessageArray.length]=validationMsg;
					}
					else
					{
						thisExpValidation=inputExpValidationArray[jQuery.inArray(thisIndex, inputIndexArray)];
						validationIndex=jQuery.inArray(thisIndex, inputIndexArray);
					}
					
					thisExpValidation=thisExpValidation.replace("{"+inputList[k]+"}", thisEnteredVal);
					inputExpValidationArray[validationIndex]=thisExpValidation;
					
					//alert(thisExpValidation);
					  
				});
				
				
			}
			
			
			for(var k=0;k<inputIndexArray.length;k++)
			{
				var thisRuleValidationFlag=eval(inputExpValidationArray[k]);
				if(thisRuleValidationFlag){
					confirmationMsgArray[confirmationMsgArray.length]=inputMessageArray[k];
				}
			}
			
				
		}
		
		
		if(confirmationMsgArray.length>0){
			confirmationFlag=false;
			var confirmationMsgString=confirmationMsgArray.join("\n");
			//alert(confirmationMsgString);
			
		}
		
		if(allValidationMsgArray.length>0){
			confirmationFlag=false;
		}
		
		
		//alert(confirmationFlag);
		
		if(confirmationFlag){
			$('#confirmResultDiv').html("<FONT COLOR='GREEN' SIZE='5' STYLE='font-weight:bold;'>CONFIRMED</FONT>");
			$('#supplierQuotationStatus').val("CONFIRMED");
		}
		else{
			$('#confirmResultDiv').html("<FONT COLOR='RED' SIZE='5' STYLE='font-weight:bold;'>NOT CONFIRMED</FONT>");
			$('#supplierQuotationStatus').val("NOT CONFIRMED");
		}
		
	}
	
	
		
	
	
	
	
	
	
	
	
	/*  APPLY CONFIRMATION END HERE    */
	
}











    
	