PRVD.APP.UC.PersonalizationSelection = function(htmlElementID)
{
    this.ElementID = htmlElementID;
	this.Element = document.getElementById(this.ElementID);
    this.OnPersonalizationSelectionChangedEvent = new PRVD.CT.EVENTS.CustomEvent(this.ElementID + "_PersonalizationSelectionChangedEvent");
    
    this.HandleTextChangedEvent = function(type, args, obj)	
	{	
        obj.UpdatePersonalizationText();
	};

    this.UpdatePersonalizationText = function()
    {
        personalizationText = "";
        
		for(var i=0; i < this.personalizationItems.length;  i++)
	    {
	        if(this.personalizationItems[i].ProductID.value == this.SelectedPersonalizationPID)
	        {
	            personalizationText += this.personalizationItems[i].SelectedText;
	        }
	    }
	    this.PersonalizationTextElement.value=escape('<PersonalizationText ProductID=\"' + this.SelectedPersonalizationPID + '\">'+ personalizationText + '</PersonalizationText>');
    };
    
	this.HandleItemSelectEvent = function(e,obj)
	{
	    obj.SelectedPersonalizationPID = obj.PersonalizationSelectionDropDown.value.split(",")[0];
	    obj.PersonalizedProdElement.value = obj.SelectedPersonalizationPID;
	    obj.PersonalizedProdRelationElement.value = obj.PersonalizationSelectionDropDown.value.split(",")[1];
	    obj.UpdatePersonalizationText();
	    
	    for(var i=0; i < obj.personalizationItems.length;  i++)
	    {
		    if (obj.personalizationItems[i].ProductID.value == obj.SelectedPersonalizationPID)
		    {
		        obj.personalizationItems[i].Show();
		    }
		    else 
		    {
			    obj.personalizationItems[i].Hide();
		    }
	    }
	    obj.OnPersonalizationSelectionChangedEvent.fire(obj.PersonalizationSelectionDropDown.value, obj.PersonalizationTextElement.value);
	    i=null;
	};

    this.CheckError = function(e, obj)
	{
	    for(var i=0; i < obj.personalizationItems.length;  i++)
        {
            if (obj.personalizationItems[i].HasError == "true")
            {
                PRVD.CT.EVENTS.Event.stopEvent(e);
                break; 
            }
	    }
	};
	
    this.Clear = function()
	{
		while(this.Element.childNodes.length > 0 )
		{
			this.Element.removeChild(this.Element.childNodes[0]);
		}
	};
	
	this.Reload = function(html)
	{
	    this.Element.innerHTML = html;
		this.LoadMemoryObjects();
	};
	
	this.LoadMemoryObjects = function()
	{
	    if(PRVD.CT.UT.GetElementsByPrvdName(this.Element, "personalizationtext").length > 0)
	    {
	        this.PersonalizationTextElement = PRVD.CT.UT.GetElementsByPrvdName(this.Element, "personalizationtext")[0];
	        this.PersonalizedProdRelationElement = PRVD.CT.UT.GetElementsByPrvdName(this.Element, "selectedpersonalizedproductrelationid")[0];
	        this.PersonalizedProdElement = PRVD.CT.UT.GetElementsByPrvdName(this.Element, "selectedpersonalizedproductid")[0];
	        this.SelectedPersonalizationPID = this.PersonalizedProdElement.value;
            if(PRVD.CT.UT.GetElementsByPrvdName(this.Element, "ddlpersonalizationproducts").length > 0)
	            this.PersonalizationSelectionDropDown = PRVD.CT.UT.GetElementsByPrvdName(this.Element, "ddlpersonalizationproducts")[0];
    	    
	        itemList = PRVD.CT.UT.GetElementsByPrvdName(this.Element, "personalizationitem");
	        this.personalizationItems = new Array(itemList.count);
	        for(var i=0; i < itemList.length; i++)
	        {
		        this.personalizationItems[i] = new PRVD.APP.UC.PersonalizationItem(itemList[i].id, i);
		        this.personalizationItems[i].UpdatePersonalizationText();
		        this.personalizationItems[i].TextChangeEvent.subscribe(this.HandleTextChangedEvent, this);
	        }
	        itemList=null;
	        i=null;
	        this.UpdatePersonalizationText();
    	    
            if(this.PersonalizationSelectionDropDown)
                PRVD.CT.EVENTS.Event.addListener(this.PersonalizationSelectionDropDown.id , "change", this.HandleItemSelectEvent, this, false);
                
            if (document.getElementsByTagName)
            {
                var objForm = document.getElementsByTagName('form');
                PRVD.CT.EVENTS.Event.addListener(objForm, "submit", this.CheckError, this, false);
            }
        }
	};
	
	this.LoadMemoryObjects();	
};
PRVD.APP.UC.PersonalizationItem = function(htmlElementID, iElementNumberInList)
{
	this.ElementID = htmlElementID;
	this.Element = document.getElementById(this.ElementID);
	this.ElementNumberInList = iElementNumberInList;
	this.ItemName = PRVD.CT.UT.GetElementsByPrvdName(this.Element, "itemname")[0];
	this.ItemText = PRVD.CT.UT.GetElementsByPrvdName(this.Element, "itemtext")[0];
	this.SortOrder = PRVD.CT.UT.GetElementsByPrvdName(this.Element, "sortorder")[0];
	this.ProductID = PRVD.CT.UT.GetElementsByPrvdName(this.Element, "personalizationProductID")[0];
	this.ErrorPanel = PRVD.CT.UT.GetElementsByPrvdName(this.Element, "itemerror")[0];
	this.ValidationExp = PRVD.CT.UT.GetElementsByPrvdName(this.Element, "regex")[0];
	this.HasError = "false";
	this.SelectedText = "";
	this.TextChangeEvent = new PRVD.CT.EVENTS.CustomEvent(this.ElementID + "_TextChangeEvent");	

    this.Show = function()
	{
		this.Element.style.display="inline";
	};
	
	this.Hide = function()
	{
		this.Element.style.display="none";
	};
	
	this.ShowError = function()
	{
	    this.HasError = "true";
	    this.ErrorPanel.style.display="block";
	    if(this.ErrorPanel.childNodes.length > 0)
	        this.ErrorPanel.childNodes[0].style.display = "block";
	};
	
	this.HideError = function()
	{
	    this.HasError = "false";
		this.ErrorPanel.style.display="none";
	};
	
	this.HandleTextChange = function(e,obj)
	{
	   var regexp = new RegExp(obj.ValidationExp.value);
	   if(regexp.test(obj.ItemText.value))
	   {
	        obj.HideError();
	        obj.UpdatePersonalizationText();
		    obj.TextChangeEvent.fire(obj.ElementNumberInList, obj.SelectedText);   
	   }
	   else
	   {
		    obj.ShowError();
	   }
	};
	
	this.UpdatePersonalizationText = function()
	{
        this.SelectedText = "<LineItem SortOrder=\"" + this.SortOrder.value + "\" DisplayName=\"" + this.ItemName.innerHTML + "\" ItemText=\"" + this.ItemText.value + "\"/>";
	};
	
	PRVD.CT.EVENTS.Event.addListener(this.ItemText, "blur", this.HandleTextChange, this, false); 
};
