/******************** DOCUMENT QUICK EDIT JAVASCRIPT LIBRARY *********************************/
/************ NOTES START *******************************************************************************************
* 
* Date: 08/22/07
* Purpose: Sku JavaScript functions
* Instructions:
* Prerequisites: (note required versions on top of the page)
*   1.1.5  js/prototype/prototype.js
************* NOTES END *********************************************************************************************/
var skusUpdated = "true";
var distinctItemFromDropDown = "";
var distinctItemFromRadio = "";
var distinctItemSequence = "";
var updateImages = true;
var fieldIndex = -1;
var ajaxSkuImageType = "";
var imageTagID = "";

/* Objects */
function SkuControl() {
  this.skuOptions = new Array();
}

/* Ajax function */
// Parameters: form, itemId, skuCall, skuopt1-6
function ajaxUpdateSkuControls(form, skuControl, itemID) {
	if (document.getElementById('selectskus')) {
    document.getElementById('selectskus').innerHTML = '';
	}
  var url = '/ajax/com.eonegroup.custom.ew.ajax.AJAXInvitationSkus';
  var formNameParm = 'formName='+form.name;
  var itmID;
  if (itemID == "") {
    var itmIdObj = form.IID;
    //skuIID
    if(itmIdObj) {
    	//
    } else {
    	itmIdObj = form.skuIID;
    }
    if(itmIdObj) {
    	if(itmIdObj.length) itmID = itmIdObj[0].value;
    	else itmID = itmIdObj.value;
    }

    if (!itmID) {
      var radioLength = itmIdObj.length;
      for(var i = 0; i < radioLength; i++) {
        if(itmIdObj[i].checked) {
          itmID = itmIdObj[i].value;
      distinctItemFromRadio = itmID;
        }
      }
    }
  }
  else {
    itmID = itemID;
  }
  
  var itemIdParm = 'itemId='+itmID;  
  var skuMessageTypes = '';
  var skuOptionParms="";
  if (skuControl) {
    if(skuControl.skuOptions.length > 0) {
    	for (var i=0;i<skuControl.skuOptions.length;i++) {
    	    // skuOptionParms = skuOptionParms + '&skuopt' + (i+1) + skuControl.skuOptions[i];
    	    //alert(skuControl.skuOptions[i]);
    	    skuOptionParms = skuOptionParms + '&skuoptions=' + encodeURIComponent(skuControl.skuOptions[i]);
    	}
    } else {
	    skuOptionParms = skuOptionParms + '&skuoptions=' + encodeURIComponent(skuControl.name);
    }
  }

  var ajaxXhtmlParams = '';
  var ajaxContainerElem = form.ajaxcontainers;
  var ajaxDspElem = form.ajaxdsps;
  if(ajaxContainerElem && ajaxDspElem) {
	  //ajaxXhtmlParams = "&ajaxXhtmlNodeNames=" + ajaxContainerElem.value + "&ajaxXhtmlDsps=" + ajaxDspElem.value;
	  var temp = new Array();
	  // add container params
	  temp = ajaxContainerElem.value.split(',');
	  for(var x=0; x<temp.length; x++) {
		  ajaxXhtmlParams += "&ajaxXhtmlNodeNames=" + temp[x];
	  }
	  // add dsp params
	  temp = new Array();
	  temp = ajaxDspElem.value.split(',');
	  for(var x=0; x<temp.length; x++) {
		  ajaxXhtmlParams += "&ajaxXhtmlDsps=" + temp[x];
	  }
  }
  
  var imageTypeParm = "&imageType=" + ajaxSkuImageType;

  var parms = itemIdParm + skuOptionParms + "&" + formNameParm + skuMessageTypes + ajaxXhtmlParams + imageTypeParm;
  
  var myAjax = new Ajax.Request( url, { method: 'get', parameters: parms, onComplete: ajaxSkuUpdateResponse, encoding:'UTF-8' });

  skusUpdated = "true";
}

/* Ajax Response */
function ajaxSkuUpdateResponse(req) {

  var reqXML = (new DOMParser()).parseFromString(req.responseText, "text/xml"); 
  var formnameTag = reqXML.getElementsByTagName('formname').item(0);
  var skuIdTag = reqXML.getElementsByTagName('skuid').item(0); 
  var defaultSkuIdTag = reqXML.getElementsByTagName('lastskuid').item(0); 
  var imageTag = reqXML.getElementsByTagName('image').item(0); 
  var priceTag = reqXML.getElementsByTagName('price').item(0);
  var inventoryMessageTag = reqXML.getElementsByTagName('inventoryMessage').item(0);
  
  var ajaxHTMLElements = reqXML.getElementsByTagName('ajaxHTMLNode');
  if(ajaxHTMLElements) {
	  var ajaxHTMLNode = ajaxHTMLElements.item(0);
	  if(ajaxHTMLNode) publishResponseXMLNode(ajaxHTMLNode)	  
  }

  //var formnameTag = req.responseXML.getElementsByTagName('formname').item(0);
  //var skuIdTag = req.responseXML.getElementsByTagName('skuid').item(0);
  //var defaultSkuIdTag = req.responseXML.getElementsByTagName('lastskuid').item(0);
  //var imageTag = req.responseXML.getElementsByTagName('image').item(0);
  //var priceTag = req.responseXML.getElementsByTagName('price').item(0);
  //var inventoryMessageTag = req.responseXML.getElementsByTagName('inventoryMessage').item(0);
  
  var formName = "";
  if (formnameTag && formnameTag.firstChild) {
    formName = formnameTag.firstChild.nodeValue;
    formName = formName.replace(/\r|\n|\r\n/g, "");
  }
  
  var skuID = "";
  if (skuIdTag && skuIdTag.firstChild) {
    skuID = skuIdTag.firstChild.nodeValue;
    if (eval("$('"+distinctItemFromDropDown+distinctItemSequence+"skuid1')")) {
    	eval("$('"+distinctItemFromDropDown+distinctItemSequence+"skuid1')").innerHTML = skuID;
    }
  }
  
  var image = "";
  if (imageTag && imageTag.firstChild) {
    image = imageTag.firstChild.nodeValue;
  }
  
  var inventoryMessage = "";
  if (inventoryMessageTag && inventoryMessageTag.firstChild) {
    inventoryMessage = inventoryMessageTag.firstChild.nodeValue;
  }
  var price = "";
  if (priceTag && priceTag.firstChild) {
    price = getChildrenXMLString(reqXML, 'price');
    if (document.getElementById("skuprice1")) {
      document.getElementById("skuprice1").innerHTML = price;    
    }
    if (eval("$('"+distinctItemFromDropDown+distinctItemSequence+"skuprice1')")) {
      eval("$('"+distinctItemFromDropDown+distinctItemSequence+"skuprice1')").innerHTML = price;
    }
    if (eval("$('"+distinctItemFromRadio+"skuprice1')")) {
      eval("$('"+distinctItemFromRadio+"skuprice1')").innerHTML = price;
    }
  }
  
  if (formName.length > 0) {
    var form = document.forms[formName];
    
    var spanElements = form.getElementsByTagName('span');
    for(i = 0; i < spanElements.length; i++) {
    	if (skuIdTag && skuIdTag.firstChild) {
	      if (spanElements[i].className == "itemid") {
	        spanElements[i].innerHTML=skuID;
	      }
	      if (spanElements[i].className == "itemid2") {
	        spanElements[i].innerHTML=skuID;
	      }
    	}
    }
    for(i = 0; i < spanElements.length; i++) {
      if (spanElements[i].className == "inventorymsg") {
        spanElements[i].innerHTML=inventoryMessage;
      }
    }
    if (priceTag && priceTag.firstChild) {
		for(i = 0; i < spanElements.length; i++) {
		    if (spanElements[i].className == "skuprice") {
		      spanElements[i].innerHTML=price;
		    }
		}
    }
  }
  if (eval("$('"+distinctItemFromDropDown+distinctItemSequence+"inventorymsg')")) {
    eval("$('"+distinctItemFromDropDown+distinctItemSequence+"inventorymsg')").innerHTML = inventoryMessage;
  }
  if (eval("$('"+distinctItemFromRadio+"inventorymsg')")) {
    eval("$('"+distinctItemFromRadio+"inventorymsg')").innerHTML = inventoryMessage;
  }

  // reset image display
  if (imageTagID.length > 0) {
        var imgElem = document.getElementById(imageTagID);
        if(imgElem) imgElem.style.display = 'none';
  }
  
  if (image.length > 0 && updateImages) {
	if (imageTagID.length > 0 && document.getElementById(imageTagID)) {
        var imgElem = document.getElementById(imageTagID);
    	imgElem.src = image;
    	imgElem.style.display = '';
	} else {
	    var imgElements = document.getElementsByTagName('img');
	    for(i = 0; i < imgElements.length; i++) {
	      if (imgElements[i].className == "itemimg") {
	      imgElements[i].src = image;
	      }
	    }
	    var imgElements = form.getElementsByTagName('img');
	    for(i = 0; i < imgElements.length; i++) {
	      if (imgElements[i].className == "itemimgthumb") {
	      imgElements[i].src = image;
	      }
	    }
	}

  }

  if (eval("$('"+distinctItemFromDropDown+distinctItemSequence+"skuID')")) {
    eval("$('"+distinctItemFromDropDown+distinctItemSequence+"skuID')").value = skuID;
  }

  updateSkuOptions(reqXML, getFieldByID(form, 'skuvalue', distinctItemFromDropDown+distinctItemSequence+'skuvalue1', fieldIndex), 'Skuoption1');
  updateSkuOptions(reqXML, getFieldByID(form, 'skuvalue', distinctItemFromDropDown+distinctItemSequence+'skuvalue2', fieldIndex), 'Skuoption2');
  updateSkuOptions(reqXML, getFieldByID(form, 'skuvalue', distinctItemFromDropDown+distinctItemSequence+'skuvalue3', fieldIndex), 'Skuoption3');
  updateSkuOptions(reqXML, getFieldByID(form, 'skuvalue', distinctItemFromDropDown+distinctItemSequence+'skuvalue4', fieldIndex), 'Skuoption4');
  updateSkuOptions(reqXML, getFieldByID(form, 'skuvalue', distinctItemFromDropDown+distinctItemSequence+'skuvalue5', fieldIndex), 'Skuoption5');
  updateSkuOptions(reqXML, getFieldByID(form, 'skuvalue', distinctItemFromDropDown+distinctItemSequence+'skuvalue6', fieldIndex), 'Skuoption6');
  
  //updateSkuOptions(reqXML, eval("$('"+distinctItemFromDropDown+"skuvalue1')"), 'Skuoption1');
  //updateSkuOptions(reqXML, eval("$('"+distinctItemFromDropDown+"skuvalue2')"), 'Skuoption2');
  //updateSkuOptions(reqXML, eval("$('"+distinctItemFromDropDown+"skuvalue3')"), 'Skuoption3');
  //updateSkuOptions(reqXML, eval("$('"+distinctItemFromDropDown+"skuvalue4')"), 'Skuoption4');
  //updateSkuOptions(reqXML, eval("$('"+distinctItemFromDropDown+"skuvalue5')"), 'Skuoption5');
  //updateSkuOptions(reqXML, eval("$('"+distinctItemFromDropDown+"skuvalue6')"), 'Skuoption6');
 
  if ('function' == typeof window.ajaxSkuExit) {
    ajaxSkuExit(reqXML);
  } 
}

function publishResponseXMLNode(respXMLNode){
	if ('function' == typeof window.removeLoadMessage) {
    removeLoadMessage();
  }
	var browser=navigator.appName;
	//alert(browser);
	//alert('respXMLNode.name '+respXMLNode.nodeName);
	
	// each child node of the response xml should be published 
	// to the document when a div element ID matches the child's node name
	var nodes = respXMLNode.childNodes;
	//alert('nodes'+nodes);
	for(var i=0; i<nodes.length; i++) {
		var nodeName = nodes[i].nodeName;
		//alert('nodeName'+nodeName);
		var thisSeg = nodeName;
		if(nodeName == 'error') {
			//process errors
			//alert('setting error div '+errorElemID+' as segment '+thisSeg);
			thisSeg = errorElemID;
			// is element/container with node name exist in document
			//alert(document.getElementById(thisSeg));
			if(document.getElementById(thisSeg)) {
				var nodeVal = '';
				var childNodes = nodes[i].childNodes;
				document.getElementById(thisSeg).innerHTML = "";
				for(var j=0; j<childNodes.length; j++) {
					
					var displayName = getNodeValue(childNodes[j], 'DisplayName');
					if (!displayName || displayName.length ==0 || displayName == 'null') {
						 displayName = '';
					} else {
						displayName += ' ';
					}
					
					nodeVal = nodeVal + displayName + getNodeValue(childNodes[j], 'Msg') + '<br/>';
				}
				
				var returnHtml = nodeVal.replace("<![CDATA[", "");
				returnHtml = returnHtml.replace("]]>", "");
				
				document.getElementById(thisSeg).innerHTML = returnHtml;
        writeScriptTagsToDOM(thisSeg);
        document.getElementById(thisSeg).focus();
			} else {
			
			}
		} else {
			// process display
			// is element/container with node name exist in document
			//alert(thisSeg +' thisSeg : '+document.getElementById(thisSeg))
			if(document.getElementById(thisSeg)) {
				var nodeVal = '';
				var childNodes = nodes[i].childNodes;
				for(var j=0; j<childNodes.length; j++) {
					if(browser=="Netscape") {
						nodeVal += (new XMLSerializer()).serializeToString(childNodes[j]);
					} else {
						nodeVal += childNodes[j].xml;
					}
				}
				//alert('nodeVal : '+nodeVal);
				var returnHtml = nodeVal.replace("<![CDATA[", "");
				while (returnHtml.indexOf("<![CDATA[") > -1) {
					returnHtml = returnHtml.replace("<![CDATA[", "");
				}
				while (returnHtml.indexOf("]]>") > -1) {
					returnHtml = returnHtml.replace("]]>", "");
				}
				document.getElementById(thisSeg).innerHTML = returnHtml;
	            writeScriptTagsToDOM(thisSeg);
			}
		}
	}
	//var nodeVal = (new XMLSerializer()).serializeToString(nodes[0]);
	//document.getElementById("testdom").innerHTML = nodeVal;
	return nodeVal;
}

/* Ajax Utility Methods */
function updateSkuOptions(req, skuControl, optionTag) {
  //alert(distinctItemFromDropDown);
  if(!skuControl) {return;}
  var skuElements = req.getElementsByTagName(optionTag);
  if (skuElements.length > 0) {
    skuControl.options.length=0;

    for(i = 0; i < skuElements.length; i++) {
      var text = skuElements.item(i).firstChild.nodeValue;
      
      if ('function' == typeof window.ajaxSkuOptionValidator) {
		    text = ajaxSkuOptionValidator(text, optionTag);
		  } 
      var option = document.createElement("option");
      option.text = text;
      option.value = text;
    skuControl.options.add(option);
    }
  }
}

/* Page functions */
function updateskucontrols(control, skuControls) {
  var controlName = control.name;
  var thisForm = control.form;
  if(!skuControls) {
	  	// alert("invalid sku control");
	  	var newControls = new Array();
		var fields = thisForm.elements;
		var arrayIndex = 0;
		for (var x=0; x<fields.length; x++) {
			if(fields[x].name == controlName) {
				newControls[arrayIndex] = fields[x];
				arrayIndex++;
			}
		}
		skuControls = newControls;
  }
  // alert("update skucontrols drop dowb\n" +skuControls);
  distinctItemFromDropDown = "";
  distinctItemSequence = "";
  var skuControl = new SkuControl();
  var callingcontrolnumber = control.id.substring(control.id.length-1, control.id.length-0);
  fieldIndex = getFieldIndexById(control);
  //alert("skuControl :"+ skuControl);
  var index = control.id.indexOf(controlName);
  
  var index1 = control.id.indexOf('_');
  var sequenceString = control.id.substring(index1 + 1);
  index1 = sequenceString.indexOf('_');
  sequenceString = sequenceString.substring(0,index1);
  if (index1 > -1) {
  	distinctItemSequence = "_" + sequenceString + "_";
  }
  var itemID = "";
  if (index > 1) {
    itemID = control.id.substring(0, index);
    itemID = itemID.replace(distinctItemSequence,"");
    distinctItemFromDropDown = itemID;
  }
  for (var i=1;i<=callingcontrolnumber;i++) {
	//alert("Control value : "+control.value+" Element : "+eval("$('"+itemID+"skuvalue"+i+"')")+ " Value : "+eval("$('"+itemID+"skuvalue"+i+"')").value);
    setSkuOption(skuControl, getFieldByID(control.form, control.name, itemID+distinctItemSequence+controlName+i, fieldIndex), i);
  }
  ajaxUpdateSkuControls(control.form, skuControl, itemID, fieldIndex);
}

/* Page Utility Methods */
function setSkuOption(skuControl, control, i) {
  if (control) {
  	skuControl.skuOptions[i-1] = control.value;
  }
}

function updateSkuFromImage(caption) {
  //alert("skufor image");
  var skuOne = document.getElementById('skuvalue1');
  
  //alert("caption :"+ caption);
  for(var i = 0; i < skuOne.options.length; i++) {  
    if(skuOne.options[i].text == caption) {
      document.getElementById('skuvalue1').selectedIndex = i;
    }
  }
  updateskucontrols(document.getElementById('skuvalue1'), '');  
}

function updateSkuFromImageWithForm(form, caption) {
  var skuOne
  
  if (form.skuvalue.length > 0) {
    skuOne = form.skuvalue[0];	
  }
  else {
  	skuOne = form.skuvalue[0];
  }
  
  for(var i = 0; i < skuOne.options.length; i++) {
    if(skuOne.options[i].text == caption) {
    	skuOne.selectedIndex = i;
    }
  }
  updateskucontrols(skuOne, '');
    
}

function updateitemcontrols() {
  if (document.getElementById('skuvalue1')) {
    ajaxUpdateSkuControls(document.getElementById('skuvalue1').form, null, "");
  }
}

function getChildrenXMLString(obj,tag){
  var nodes =  obj.getElementsByTagName(tag);
  var nodeVal = '';
  var browser=navigator.appName;
  //alert(browser);
  for(var i=0; i<nodes.length; i++) {
    var childNodes = nodes[i].childNodes;
    for(var j=0; j<childNodes.length; j++) {
      if(browser=="Netscape") {
        nodeVal += (new XMLSerializer()).serializeToString(childNodes[j]);
      } else {
        nodeVal += childNodes[j].xml;
      }
    }
  }
  //var nodeVal = (new XMLSerializer()).serializeToString(nodes[0]);
  //document.getElementById("testdom").innerHTML = nodeVal;
  return nodeVal;
}

function submitForm(form) {
  var message = '';
  var submitForm = true;
  var found = false;
  for (var x=0; x<6; x++) {
    if (form.skutext[x]) {
    	found = true;
    	var select = eval("$('skuvalue"+(x+1)+"')").value;
      if (select.indexOf('Select') > -1) {
        message = message + 'Please select '+ form.skutext[x].value + '<br/>';
        submitForm = false;
      }
    }
  }
		 
	if (!found && form.skutext) {
    var select =form.skuvalue.value;
    if (select.indexOf('Select') > -1) {
      message = message + 'Please select '+ form.skutext.value + '<br/>';
      submitForm = false;
    }
  }
       
  if (!submitForm) {
    document.getElementById('selectskus').innerHTML = message;
    return false; 
  }
  else {
    form.submit();
  }
}

if (typeof(DOMParser) == 'undefined') {
  DOMParser = function() {}
  DOMParser.prototype.parseFromString = function(str, contentType)
  { 
    if(typeof(ActiveXObject) != 'undefined') {
      var xmldata = new ActiveXObject('MSXML.DomDocument');
      xmldata.async = false;
      xmldata.loadXML(str); 
      return xmldata; 
    } 
    else if(typeof(XMLHttpRequest) != 'undefined') {
      var xmldata = new XMLHttpRequest; 
      if(!contentType) {
        contentType = 'application/xml'; 
      } 
      xmldata.open('GET', 'data:' + contentType + ';charset=utf-8,' + encodeURIComponent(str), false);
      if(xmldata.overrideMimeType) {
        xmldata.overrideMimeType(contentType); 
      }
      xmldata.send(null);
      return xmldata.responseXML;
    } 
  } 
}