﻿YAHOO.namespace("Myxer");

YAHOO.Myxer.MAXCHAR = 40;
YAHOO.Myxer.HIDDEN = "none";
YAHOO.Myxer.VISIBLE = "inline";
YAHOO.Myxer.ISADMIN = false;

var chbxNameTones;
var nameTonePanel;


YAHOO.Myxer.InitializeAutoComplete = function(){
    YAHOO.Myxer.GetNameTones();
}

YAHOO.Myxer.Initialize = function(){   
    
    YAHOO.util.Event.addListener(ddlCategory, "change", YAHOO.Myxer.GetTagsStyles);
    YAHOO.util.Event.addListener(ddlCategory, "keyup", YAHOO.Myxer.GetTagsStyles);
    
    YAHOO.util.Event.addListener(tagInput[0], 'keyup',  YAHOO.Myxer.TagEntryValidation_KeyUp);
    YAHOO.util.Event.addListener(tagInput[1], 'keyup',  YAHOO.Myxer.TagEntryValidation_KeyUp);
    YAHOO.util.Event.addListener(tagInput[2], 'keyup',  YAHOO.Myxer.TagEntryValidation_KeyUp);
    
    //NameTone displayname field event
    YAHOO.util.Event.addListener(nameField, 'keyup',  YAHOO.Myxer.NameEntry_KeyUp);
    
    YAHOO.Myxer.ISADMIN = (isAdmin != null && isAdmin != "true") ? false : true;
    
    fadeOut = new YAHOO.util.Anim('display', {height:{ to : 0}, padding: { to: 0}});
    fadeIn = new YAHOO.util.Anim('display', {height:{ to : 50}, padding: { to: 0}});
    
    arrayOfUserST = currentStylesTags.split(",");

    if(ddlCategory.selectedIndex != 0)
    {
       YAHOO.Myxer.GetTagsStyles();
    }
    else
    {
       tagsPanel.style.display = YAHOO.Myxer.VISIBLE;
       nameTonesPanel.style.display =  YAHOO.Myxer.HIDDEN;
       YAHOO.Myxer.PopulateTagFields(arrayOfUserST)
    }
       
     
     
     //Separate input type CHECKBOX and HIDDEN
     for(var i = 0; i < tableOfInput.length; i++)
     {
         if(i % 2 == 0)
           arrayOfCHBX.push(tableOfInput[i])
         else
           arrayOfHDN.push(tableOfInput[i])
     }
     
}
//End of Initilaize

//Used in admin panel
YAHOO.Myxer.InitializeNameTones = function(){ 
   if(chbxNameTones.checked)
   {
       nameTonePanel.style.display = YAHOO.Myxer.VISIBLE;
   }
   else
      nameTonePanel.style.display = YAHOO.Myxer.HIDDEN;
     
   YAHOO.util.Event.addListener(chbxNameTones, 'click',  YAHOO.Myxer.NameTones_Check);
}
//End of InitializeNameTones



YAHOO.Myxer.NameTones_Check = function (e){
    
   var elTarget = YAHOO.util.Event.getTarget(e);
   if(elTarget.checked){
      nameTonePanel.style.display = YAHOO.Myxer.VISIBLE;
      YAHOO.util.Connect.asyncRequest('GET', '/ajax/nametones_autocomplete/' , YAHOO.Myxer.NameToneCallback);
   }
   else {
      nameTonePanel.style.display = YAHOO.Myxer.HIDDEN;
   }
  
   
}

YAHOO.Myxer.NameToneCallback = {

    success: function(oResponse) {
        var result = oResponse.responseText;
        if (!empty(result)) {
            AutocompleteDisplayName = result.split(",");
        }
        else {
            AutocompleteDisplayName = null;
        }

        YAHOO.Myxer.LoadNameToneAutoComplete();
    },

    failure: function(oResponse) {
        //alert('fail');
    }
};

YAHOO.Myxer.TextCounter_2 = function ( param1 , maxlimit ) {

    var isIE = (window.navigator.userAgent.indexOf("MSIE") > 0);
    var field = document.getElementById(param1);
    var extra = 0;
    
    if (navigator.appName=="Netscape" && 
        parseInt(navigator.appVersion)>=5) {
            var index = field.value.indexOf('\n');
            while(index != -1) {
            extra += 1;
            index = field.value.indexOf('\n',index+1);
        }
    }

    if (field.value.length + extra > maxlimit)
    {
        field.value = field.value.substring(0, maxlimit-extra);
       // field.style.border = "1px solid #c30";
       // YAHOO.util.Dom.removeClass('display', 'error-display');
       // YAHOO.util.Dom.addClass('display2', 'warning-display'); 
       // YAHOO.util.Dom.get('display2').innerHTML = "Tags can no no longer than 40 characters.";
       // fadeInOut.animate();    
    }       
}

YAHOO.Myxer.ToggleElementOn = function(control, options){    
     
     if(!YAHOO.Myxer.ISADMIN)
     {
         switch(control)
         {
            case true:
              toggle_SubmitButton(true)   
              fadeIn.animate();
              break;
            case false:
              toggle_SubmitButton(false)
              fadeOut.animate();
              break;
            default:
              break;     
         }
     }
     
     if(options != null){  
         
         YAHOO.util.Dom.get('error-message').innerHTML = "";
         
         
         switch(options.code)
         {         
            case 1:
              document.getElementById('error-message').innerHTML = 'Up to three (3) tags are allowed. Please remove some of the tags from the field and/or uncheck some of the selected tags.';
              if(options.target.type == "text")
              {
                 YAHOO.util.Dom.addClass(options.target, 'invalid');
              }
              break;    
            case 2:
              document.getElementById('error-message').innerHTML = 'The tag has already been used.';
              YAHOO.util.Dom.addClass(options.target, 'invalid');              
              break;
            case 3:
              YAHOO.util.Dom.get('error-message').innerHTML = 'The tag entered is already available in the list above. Please select this tag from the list.';
              YAHOO.util.Dom.addClass(options.target, 'invalid');      
              break;
            case 4:
              document.getElementById('error-message').innerHTML = 'You have entered invalid characters in the tag field.';
              YAHOO.util.Dom.addClass(options.target, 'invalid');      
              break;
            case 5:
              document.getElementById('error-message').innerHTML = 'The current category name cannot be used as a tag.';
              YAHOO.util.Dom.addClass(options.target, 'invalid');      
              break;
            case "reset-all":
              for(var i = 0; i < tagInput.length; i++)
              {
                 YAHOO.util.Dom.removeClass(tagInput[i], 'invalid');
              }
              break;
            default:
              YAHOO.util.Dom.removeClass(options.target, 'invalid');
              break;
          }   
      }
}


YAHOO.Myxer.Validate = function(e){
  
   var elTarget = typeof e.target != 'undefined' ? YAHOO.util.Event.getTarget(e) : e;
       
   var numOfTagsEntered = 0;
   for(var t = 0; t < tagInput.length; t++ )
   {
        if(!empty(tagInput[t].value))
           numOfTagsEntered++;
   }   
   
   if(numOfTagsEntered > numOfTagsAllowed)
   {
       YAHOO.Myxer.ToggleElementOn(true, {target: elTarget, code: 1});    
       return;
   }
   else{
       YAHOO.Myxer.ToggleElementOn(false, {target: elTarget, code: "default"});
   }   

}


YAHOO.Myxer.ValidateNameToneInput = function(input)
{
    var EXPRESSION = "^[a-zA-Z-\s]+$";
    var re = new RegExp(EXPRESSION);
    var isValid = true;
    
    input = input.replace(/^\s*|\s*$/g,'');
    var result = input.split(" ");
    
    if(result.length > 2)
    {
      /*more than two words found. "Hello Kitty" is valid while "Hello Kitty Kat" is invalid*/
       toggle_SubmitButton(true);  //disable submit button 
       YAHOO.util.Dom.addClass(nameField, 'invalid');   
       return;
    }      
    
    for(var i = 0; i < result.length; i++)
    {
        if(!result[i].replace(/^\s+|\s+$/g, '').match(re)) 
        {
           isValid = false;
        }    
    }
    
    if(isValid)
    {
        YAHOO.util.Dom.removeClass(nameField, 'invalid');
        toggle_SubmitButton(false);  
    } else {
        YAHOO.util.Dom.addClass(nameField, 'invalid');
        toggle_SubmitButton(true);
    }    
      
}

YAHOO.Myxer.ValidateCheckBox = function(){
       
   var numOfTagsEntered = 0;
   for (var i = 0; i < checkBoxCount.value; i++) {        
      if(arrayOfCHBX[i].checked == true)
         numOfTagsEntered++;
   }
   
   if(numOfTagsEntered >= numOfTagsAllowed)
   {
      for (var i = 0; i < checkBoxCount.value; i++) {        
         if(arrayOfCHBX[i].checked != true)
            arrayOfCHBX[i].disabled = true;
      }
   }
   else{
      for (var i = 0; i < checkBoxCount.value; i++) {        
         if(arrayOfCHBX[i].checked != true)
            arrayOfCHBX[i].disabled = false;
      }
   }

}

YAHOO.Myxer.GetNameTones = function(e) {
    var responseNameToneSuccess = function(obj) {
        var result = obj.responseText;
        if (!empty(result)) {
            AutocompleteDisplayName = result.split(",");
        }
        else {
            AutocompleteDisplayName = null;
        }

        YAHOO.Myxer.LoadNameToneAutoComplete();
    }

    var nametonesCallback = { success: responseNameToneSuccess };

    YAHOO.util.Connect.asyncRequest('GET', '/ajax/nametones_autocomplete/', nametonesCallback);
}

YAHOO.Myxer.GetTagsStyles = function(e) {
 
	var responseSuccess = function(o)
    {       
        var result = o.responseText;
        if(empty(result) || result == '<?xml version="1.0" ?>'){
           tagStylesArrayForAutocomplete = null;
           panelTagStyles.style.display = "none";
        }
        else{
           tagStylesArrayForAutocomplete = result.split(",");
           panelTagStyles.style.display = "block";         
        }
        
         YAHOO.Myxer.LoadAutoComplete();
    }
        
    var callback = { success : responseSuccess};
        
    if(ddlCategory.options[ddlCategory.selectedIndex].value == specialCategory)
    {
       //do something
       tagsPanel.style.display = YAHOO.Myxer.HIDDEN;
       nameTonesPanel.style.display = YAHOO.Myxer.VISIBLE;
       
       YAHOO.Myxer.GetNameTones();
    }
    else
    {
        tagsPanel.style.display = YAHOO.Myxer.VISIBLE;
        nameTonesPanel.style.display =  YAHOO.Myxer.HIDDEN;
              
        YAHOO.util.Connect.asyncRequest('GET', '/ajax/styles_tags/?contenttype='+ contentType +'+&category=' + ddlCategory.options[ddlCategory.selectedIndex].value , callback);
    }
}

YAHOO.Myxer.LoadNameToneAutoComplete = function() {
    
    if (AutocompleteDisplayName != null) {

        /*//This extended "YAHOO.Myxer.FilterDataSource" function is no longer working as of YUI 2.6.0 & it appears the standard "YAHOO.util.LocalDataSource" works just fine in this case.
        YAHOO.Myxer.FilterDataSource = function() {
        YAHOO.util.LocalDataSource.apply(this, arguments);
        };

        YAHOO.lang.extend(YAHOO.Myxer.FilterDataSource, YAHOO.util.LocalDataSource, {

            getResults: function(oCallbackFn, sQuery, oParent) {
        var filtrationFn = function(sQuery, aResults, oSelf) {
        // fill aNewResults with a limited set of aResults
        var aNewResults = [];

                    // custom implementation which keeps the first result 
        for (var i = 0; i < aResults.length; i++) {
        aNewResults.push(aResults[i]);
        }
        // here's the magic, we give aNewResults (instead of aResults) to the actual callback function
        oCallbackFn(sQuery, aNewResults, oParent);
        };
        YAHOO.Myxer.FilterDataSource.superclass.getResults.call(this, filtrationFn, sQuery, oParent);
        }
        }); */

        YAHOO.Myxer.ACJSArray = new function() {
            if (AutocompleteDisplayName != null) {
                // Instantiate DataSource
                var oACDS = new YAHOO.util.LocalDataSource(AutocompleteDisplayName);
                /*//This extended "YAHOO.Myxer.FilterDataSource" function is no longer working as of YUI 2.6.0 & it appears the standard "YAHOO.util.LocalDataSource" works just fine in this case.
                var oACDS = new YAHOO.Myxer.FilterDataSource(AutocompleteDisplayName);*/
                // Instantiate first AutoComplete
                var oNameToneAutoComplete = new YAHOO.widget.AutoComplete(nameField, nameToneResults, oACDS);
                oNameToneAutoComplete.prehighlightClassName = "yui-ac-prehighlight";
                oNameToneAutoComplete.highlightClassName = "yui-ac-highlight";
                oNameToneAutoComplete.typeAhead = false;
                oNameToneAutoComplete.useShadow = true;
                oNameToneAutoComplete.forceSelection = false;
                oNameToneAutoComplete.autoHighlight = false;
                oNameToneAutoComplete.formatResult = function(oResultItem, sQuery) {
                    var sMarkup = oResultItem[0];
                    return (sMarkup);
                };
                //fire search on autocomplete select
                oNameToneAutoComplete.itemSelectEvent.subscribe( function() { nameButtonGo.click(); } );
                YAHOO.util.Dom.removeClass(nameField, 'yui-ac-input');
                YAHOO.util.Dom.removeClass(nameToneResults, 'yui-ac-container');

            }

        }

    }

}
 
 YAHOO.Myxer.LoadAutoComplete = function()  
 {

   //reset checkbox, labels and hidden field
    var k = 0;
    if(ddlCategory.options[ddlCategory.selectedIndex].value != currentCategory)
    {
       for (var i = 0; i < checkBoxInitialCount; i++) {  
          //empty labels
          arrayOfLBL[i].innerHTML = "";
          
          //hide and uncheck checkbox
          arrayOfCHBX[i].checked = false;

          //empty hidden field
          arrayOfHDN[i].value = "";
          
          //hide row
          YAHOO.util.Dom.addClass(arrayOfROWS[i], 'hide-cell');     
       }
   
   }
   YAHOO.Myxer.ToggleElementOn(false, {code: "reset-all"});
   
   //array of the user tags removed
   var tagsRemovedArr = new Array();
   
   //get copy of array to preserve the orginal
   var tempArrayOfUserST = arrayOfUserST.slice();
   
   //array recieved from server side after ajax call
   if(tagStylesArrayForAutocomplete != null){
   
       
       if(tagStylesArrayForAutocomplete.length < checkBoxInitialCount)
          checkBoxCount.value = tagStylesArrayForAutocomplete.length;
       else
          checkBoxCount.value = checkBoxInitialCount; 
       
       //init array for the labels to be displayed
       tagStylesArrayForLabels = new Array(checkBoxCount.value);           
       var checkedCounter = 0;
       for (var i = 0; i < checkBoxCount.value; i++) 
       {  
         
         
          if(tempArrayOfUserST != null)
          {
             for(var t = 0; t < arrayOfUserST.length; t++ )
             {
                if(arrayOfUserST[t].toLowerCase() == tagStylesArrayForAutocomplete[i].toLowerCase() && checkedCounter < numOfTagsAllowed)
                {
                   arrayOfCHBX[i].checked = true;
                   tagsRemovedArr.push(arrayOfUserST[t])
                   tempArrayOfUserST.splice(t,1);
                   checkedCounter++;
                }
             }
          } 
          
          YAHOO.util.Event.addListener(arrayOfCHBX[i], 'click',  YAHOO.Myxer.ValidateCheckBox);             
         // arrayOfCHBX[i].style.display = "inline"; 
          
          YAHOO.util.Dom.removeClass(arrayOfROWS[i], 'hide-cell');      
          
          arrayOfHDN[i].value = tagStylesArrayForAutocomplete[i];  
        
          arrayOfLBL[i].innerHTML = tagStylesArrayForAutocomplete[i];    
          tagStylesArrayForLabels[i] = tagStylesArrayForAutocomplete[i];  
          
       }    
       YAHOO.Myxer.ValidateCheckBox();     
            
              
       autoComepleteSTArray = new Array(tagStylesArrayForAutocomplete.length - checkBoxCount.value)  
       
       for(var j = 0; j < autoComepleteSTArray.length; j++)
       {
           autoComepleteSTArray[j] = tagStylesArrayForAutocomplete[parseInt(checkBoxCount.value) + j]           
       }     
   }//end of if
   
   YAHOO.Myxer.PopulateTagFields(tempArrayOfUserST, tagsRemovedArr)

   /*//This extended "YAHOO.Myxer.FilterDataSource" function is no longer working as of YUI 2.6.0 & it appears the "YAHOO.util.LocalDataSource" works just fine in this case.
   //TODO: Re-wire "keeps the unduplicated results only" logic
   YAHOO.Myxer.FilterDataSource = function () {
   YAHOO.util.LocalDataSource.apply(this, arguments);
   };
    
   YAHOO.lang.extend(YAHOO.Myxer.FilterDataSource, YAHOO.util.LocalDataSource, {

            getResults: function (oCallbackFn, sQuery, oParent) {
   var filtrationFn = function (sQuery, aResults, oSelf) {
   // fill aNewResults with a limited set of aResults
   var aNewResults = [];                        

                    //keeps the unduplicated results only
   for(var i=0; i < aResults.length; i++)
   {
   if (aResults[i] != tagInput[0].value && aResults[i] != tagInput[1].value && aResults[i] != tagInput[2].value) 
   aNewResults.push(aResults[i]);                       
   }                    
   // here's the magic, we give aNewResults (instead of aResults) to the actual callback function
   oCallbackFn(sQuery, aNewResults, oParent);
   };               
   YAHOO.Myxer.FilterDataSource.superclass.getResults.call(this, filtrationFn, sQuery, oParent);
   }
   });*/

   YAHOO.Myxer.ACJSArray = new function() {
    
        /*//This extended "YAHOO.Myxer.FilterDataSource" function is no longer working as of YUI 2.6.0 & it appears the "YAHOO.util.LocalDataSource" works just fine in this case.
        var oACDS = new YAHOO.Myxer.FilterDataSource(autoComepleteSTArray);  */
        var oACDS = new YAHOO.util.LocalDataSource(autoComepleteSTArray);   

        if(autoComepleteSTArray != null) {
            // Instantiate first AutoComplete        
            var oAutoComplete1 = new YAHOO.widget.AutoComplete(tagInput[0],  tagInputDisplay[0], oACDS);
            oAutoComplete1.prehighlightClassName = "yui-ac-prehighlight";
            oAutoComplete1.highlightClassName = "yui-ac-highlight";
            oAutoComplete1.typeAhead = false;
            oAutoComplete1.useShadow = true;
            oAutoComplete1.forceSelection = false;
            oAutoComplete1.formatResult = function(oResultItem, sQuery) {
                var sMarkup = oResultItem[0];
                return (sMarkup);
            };
            
            // Instantiate second AutoComplete
            var oAutoComplete2 = new YAHOO.widget.AutoComplete(tagInput[1],  tagInputDisplay[1], oACDS);
            oAutoComplete2.prehighlightClassName = "yui-ac-prehighlight";
            oAutoComplete2.highlightClassName = "yui-ac-highlight";
            oAutoComplete2.typeAhead = false;
            oAutoComplete2.useShadow = true;
            oAutoComplete2.forceSelection = false;
            oAutoComplete2.formatResult = function(oResultItem, sQuery) {
                var sMarkup = oResultItem[0];
                return (sMarkup);
            };
            
            // Instantiate second AutoComplete
            var oAutoComplete3 = new YAHOO.widget.AutoComplete(tagInput[2],  tagInputDisplay[2], oACDS);
            oAutoComplete3.prehighlightClassName = "yui-ac-prehighlight";
            oAutoComplete3.highlightClassName = "yui-ac-highlight";
            oAutoComplete3.typeAhead = false;
            oAutoComplete3.useShadow = true;
            oAutoComplete3.forceSelection = false;
            oAutoComplete3.formatResult = function(oResultItem, sQuery) {
                var sMarkup = oResultItem[0];
                return (sMarkup);
            };
            
            /*hack to remove styling*/
             for (i = 0; i < tagInput.length; i++)
             {
                YAHOO.util.Dom.removeClass(tagInput[i], 'yui-ac-input');
                YAHOO.util.Dom.removeClass(tagInputDisplay[i], 'yui-ac-container');
             }
         }
    };
 }
  
YAHOO.Myxer.PopulateTagFields = function(tempArrayOfUserST, tagsRemovedArr)
{
    if(!empty(tagsRemovedArr))
    {
       for(var t = 0; t < tagsRemovedArr.length; t++ )
       {
            for(var v = t; v < tagInput.length; v++)
            {
                if(tagInput[v].value.toLowerCase() == tagsRemovedArr[t].toLowerCase() )
                {  
                   tagInput[v].value = '';
                   break;                   
                }
            }
       }    
    }
   
    if(!empty(tempArrayOfUserST))
    {
       for(var t = 0; t < tempArrayOfUserST.length; t++ )
       {
            for(var v = t; v < tagInput.length; v++)
            {
                if(empty(tagInput[v].value) || tagInput[v].value.toLowerCase() == tempArrayOfUserST[t].toLowerCase() )
                {  
                   tagInput[v].value = tempArrayOfUserST[t];
                   break;                   
                }
            }
       }    
   }
}       

YAHOO.Myxer.NameEntry_KeyUp = function (e) {
     var elTarget = typeof e != 'undefined' ? YAHOO.util.Event.getTarget(e) : e;

     YAHOO.Myxer.ValidateNameToneInput(elTarget.value);
}

YAHOO.Myxer.TagEntryValidation_KeyUp = function (e) {
     var elTarget = typeof e != 'undefined' ? YAHOO.util.Event.getTarget(e) : e;

     YAHOO.Myxer.ValidationCallback = {
                
        success: function (oResponse) {        
          
           YAHOO.Myxer.Validate(elTarget);
           var reponse = elTarget.value.replace(/^\s+|\s+$/g, '') ;
           
            
           for(var t = 0; t < tagInput.length; t++)
           {
               if(reponse.toLowerCase() == ddlCategory.options[ddlCategory.selectedIndex].text.toLowerCase())
               {
                   YAHOO.Myxer.ToggleElementOn(true, {target: elTarget, code: 5});
                   break;
               }
               if(reponse.toLowerCase() == tagInput[t].value.toLowerCase() && elTarget.id != tagInput[t].id)
               {
                   YAHOO.Myxer.ToggleElementOn(true, {target: elTarget, code: 2});
                   break;
               }
               else if(tagStylesArrayForLabels != null){
               
                  
                  for(var i = 0; i < tagStylesArrayForLabels.length; i++)
                  {
                      if(tagStylesArrayForLabels[i].toLowerCase() == reponse.toLowerCase())
                      {
                          YAHOO.Myxer.ToggleElementOn(true, {target: elTarget, code: 3});
                      }
                  }
               }
           }
           
          YAHOO.Myxer.TextCounter_2(elTarget.id, YAHOO.Myxer.MAXCHAR)
          
          return false;
        },
        
        failure: function (oResponse) {
                   
            if(empty(elTarget.value))
            {               
                YAHOO.Myxer.ToggleElementOn(false, {target: elTarget});
            }
            else {             
                YAHOO.Myxer.ToggleElementOn(true, {target: elTarget, code: 4});
            }
             YAHOO.Myxer.TextCounter_2(elTarget.id, YAHOO.Myxer.MAXCHAR)
        }
    };
    YAHOO.util.Connect.asyncRequest('GET', '/ajax/validatestyles_tags/?tag=' + escape(elTarget.value) , YAHOO.Myxer.ValidationCallback);
 };



