﻿    var Skills = new Class({
        Implements: [Options, Events],
        options: {
            items: [],
            urlFile:"/_common/app/getSkillJson.aspx",
            containerid:"divSkillContainer",
            container:null,
            compact:true,
            SkillsetId:"",
            CandidateId:"",
            AdvertId:"",
            varName:"mySkills"
        },
        initialize: function(options){
            this.setOptions(options);
            if(!$(this.options.containerid)){
                var el = new Element('div', {'class': 'skillList','id':containerid});
            }
            
            this.container = $(this.options.containerid);
            if(options['compact']) {this.compact = options['compact']}else{this.compact=false};
            if(options['CandidateId']) {this.CandidateId = options['CandidateId']}else{this.CandidateId=""};
            if(options['AdvertId']) {this.AdvertId = options['AdvertId']}else{this.AdvertId=""};
            if(options['urlFile']) {this.urlFile = options['urlFile']}else{this.urlFile="/_common/app/getSkillJson.aspx"};
            if(options['varName']) {this.varName = options['varName']}else{this.varName="mySkills"};
            this.SkillsetId = "";
            
            this.myData = new Hash({});
            this.executeOnce();
        },
        items:[],
        setItem:function(skillId,value){
            this.myData.set(skillId,value);
        },
        executeOnce:function(){
            var boxDelay = $('boxDelay');
            var oThis = this;
//            $$(".action").each(function(element){
//                element.addEvent("click",function(e){
//                    var myDiv  = new Element('div', {'class': 'loading','id': 'myDiv'});
//                    var parent  = element.getParent("div");
//                    myDiv.inject(parent,'bottom');
//                });
//            });
            $$('.skills a').each(function(element){
                var groupID     = element.getProperty('id');
                var groupName   = element.get('text');
                element.addEvent('click', function(e) {
                    $("MoreSkill").removeClass("selected");
                    $("LessSkill").addClass("selected");
                    $("selectedSkills").removeClass("selected");
                    oThis.loadSkills(groupID,true);
                })
            });
            $('txtSearchSkill').addEvent('keydown',function(event){
                event = new Event(event);
                if (event.key == 'enter'){
                    event.stop();
                    if(this.value.length>=3){
                        mySkills.searchSkills($('txtSearchSkill').value);
                    }
                }
            }) 

            var moreSkill = $("MoreSkill");
            var LessSkill = $("LessSkill");
            var selectedSkills = $("selectedSkills");
            //var currentSelectedSkill = $("currentSelectedSkill");
            moreSkill.addEvent('click',function(){
                mySkills.compact = false;
                LessSkill.removeClass("selected");
                boxDelay.empty().addClass('ajax-loading');
                moreSkill.addClass("selected");
                selectedSkills.removeClass("selected");
                mySkills.showCompactSkill(false);      
            })
            LessSkill.addEvent('click',function(){
                mySkills.compact = true;                
                boxDelay.empty().addClass('ajax-loading');
                LessSkill.addClass("selected");
                moreSkill.removeClass("selected");
                selectedSkills.removeClass("selected");
                mySkills.showCompactSkill(true);
            })
            selectedSkills.addEvent('click',function(){
                mySkills.compact = true;          
                boxDelay.empty().addClass('ajax-loading');
                selectedSkills.addClass("selected");      
                LessSkill.removeClass("selected");
                moreSkill.removeClass("selected");
                mySkills.showSelectedSkills();
            })            
            var initialData = $("hiddenSkillValue").value;
            if(initialData==""){
                return;
            }
            var initialDataJson = JSON.decode(initialData);
            initialDataJson.skills.each(function(skill) {
                oThis.setItem(skill.id,skill.value);
            });
            oThis.save();
        },
        addSkill:function(skill){
            this.items.include(skill);
        },
        showCompactSkill:function(isShowMore){
            if(this.SkillsetId.length==0){
                return;
            }
            this.loadSkills(this.SkillsetId,isShowMore);
        },
        loadSkills:function(skillSetId,showCompact){
		    var nextEffect = this.nextEffect.bind(this);
		    var ajaxFailure = this.ajaxFailure.bind(this);
		    this.SkillsetId = skillSetId;
            var request = new Request.JSON({
                url:this.urlFile+"?skillsetId="+skillSetId+"&compact="+showCompact+"&candidateId="+this.CandidateId+"&AdvertId="+this.AdvertId,
                onComplete:nextEffect,
                onFailure:ajaxFailure
            }).send();
        },
        searchSkills:function(searchText){
		    var nextEffect = this.nextEffect.bind(this);
		    var ajaxFailure = this.ajaxFailure.bind(this);
            var request = new Request.JSON({
                url:this.options.urlFile+"?search="+searchText,
                onComplete:nextEffect,
                onFailure:ajaxFailure
            }).send();
        },
        showSelectedSkills:function(){
		    var nextEffect = this.nextEffect.bind(this);
		    var ajaxFailure = this.ajaxFailure.bind(this);
		    var txt = this.toString();
            //this.SkillsetId = skillSetId;
            var request = new Request.JSON({
                url:this.options.urlFile+"?skills="+txt+"&skillsetId="+this.SkillsetId+"&selected=true"+"&candidateId="+this.CandidateId+"&AdvertId="+this.AdvertId,
                //url:this.options.urlFile+"?skills="+txt,
                onComplete:nextEffect,
                onFailure:ajaxFailure
            }).send();
        },
        nextEffect:function(jsonObj){
            
            var boxDelay = $('boxDelay');
            var oThis = this;
            var counter = 0;
            this.items.length=0;
            jsonObj.skills.each(function(skill) {
                oThis.addSkill({'id':skill.id,'name':skill.name,'value':skill.value,'isCheckbox':skill.isCheckbox?true:false});
                counter++;
            });
            boxDelay.set('text', '');
		    boxDelay.removeClass('ajax-loading'); 
            this.render();
        },

	    iif:function(conditional,trueSt,falseSt){
	        if(conditional){
	            return trueSt;
	        }else{
	            return falseSt;
	        }
	    },
	    isCandidate:function(){
	        if(this.CandidateId==""){
	            return false;
	        }else{
	            return true;
	        }
	    },
	    renderCandidate:function(){
	        var counter = 0;
	        var HTML    = '';
	        HTML        += '<div class="gridContain">';
	        HTML        += '<table class="grid"  cellpadding="0" cellspacing="0">';
	        HTML        += '<thead><tr><td></td><th>N/A</th><th>Good</th><th>Strong</th><th>Master</th></tr></thead>';
	        HTML        += '<tbody>';
	        var oThis = this;
	        
		    this.items.each(function(skill) {
		        counter = counter + 1;
		        if(counter % 2){
		            HTML        += '<tr class="alternate" style="border-bottom:1px solid black;background-color:white">';
		        }else{
		            HTML        += '<tr class="alternate" style="border-bottom:1px solid black;">';
		        }
                var item;
		        if (!Browser.Engine.trident){
		            item = oThis.myData.get(skill.id);
		        }else{
		            item = oThis.myData.get(skill.id);
		            //item = null;
		        }
                
                if(item==null){
                    if(skill.isCheckbox){
	                    HTML        += '    <td class="column1">' + skill.name + '</td>';
	                    HTML        += '    <td colspan="4"><input class="radio" value="1" type="checkbox" onclick=if(this.checked){eval(' + oThis.varName + '.setItem("' +skill.id + '","1")' + ');}else{eval(' + oThis.varName + '.setItem("' +skill.id + '","0")' + ')} name="radSkillRating_'+ skill.id+'" id="radSkillRating_'+skill.id+'" ' + oThis.iif(skill.value==1,"checked","") + '/><label for="radSkillRating_'+skill.id+'"> Certified</label></td>';
                    }else{
	                    HTML        += '    <td class="column1">' + skill.name + '</td>';
	                    HTML        += '    <td><input class="radio" value="0" type="radio" onclick=eval(' + oThis.varName + '.setItem("' +skill.id + '","0")' + ') name="radSkillRating_'+ skill.id+'" id="radSkillRating_'+skill.id+'na" ' + oThis.iif(skill.value==0,"checked","") + '/><label for="radSkillRating_'+skill.id+'na">N/A</label></td>';
	                    HTML        += '    <td><input class="radio" value="1" type="radio" onclick=eval(' + oThis.varName + '.setItem("' +skill.id + '","1")' + ') name="radSkillRating_'+ skill.id+'" id="radSkillRating_'+skill.id+'Good" ' + oThis.iif(skill.value==1,"checked","") + ' /><label for="radSkillRating_'+skill.id+'Good">Good</label></td>';
	                    HTML        += '    <td><input class="radio" value="2" type="radio" onclick=eval(' + oThis.varName + '.setItem("' +skill.id + '","2")' + ') name="radSkillRating_'+ skill.id+'" id="radSkillRating_'+skill.id+'Strong" ' + oThis.iif(skill.value==2,"checked","") + '/><label for="radSkillRating_'+skill.id+'Strong">Strong</label></td>';
	                    HTML        += '    <td><input class="radio" value="3" type="radio" onclick=eval(' + oThis.varName + '.setItem("' +skill.id + '","3")' + ') name="radSkillRating_'+ skill.id+'" id="radSkillRating_'+skill.id+'Master" ' + oThis.iif(skill.value==3,"checked","") + '/><label for="radSkillRating_'+skill.id+'Master">Master</label></td>';
                    }
                }else{
                    if(skill.isCheckbox){
	                    HTML        += '    <td class="column1">' + skill.name + '</td>';
	                    HTML        += '    <td colspan="4"><input class="radio" value="1" type="checkbox" onclick=if(this.checked){eval(' + oThis.varName + '.setItem("' +skill.id + '","1")' + ');}else{eval(' + oThis.varName + '.setItem("' +skill.id + '","0")' + ')} name="radSkillRating_'+ skill.id+'" id="radSkillRating_'+skill.id+'Good" ' + oThis.iif(item==1,"checked","") + ' /><label for="radSkillRating_'+skill.id+'Good"> Certified</label></td>';
                    }else{
	                    HTML        += '    <td class="column1">' + skill.name + '</td>';
	                    HTML        += '    <td><input class="radio" value="0" type="radio" onclick=eval(' + oThis.varName + '.setItem("' +skill.id + '","0")' + ') name="radSkillRating_'+ skill.id+'" id="radSkillRating_'+skill.id+'na" ' + oThis.iif(item==0,"checked","") + '/><label for="radSkillRating_'+skill.id+'na">N/A</label></td>';
	                    HTML        += '    <td><input class="radio" value="1" type="radio" onclick=eval(' + oThis.varName + '.setItem("' +skill.id + '","1")' + ') name="radSkillRating_'+ skill.id+'" id="radSkillRating_'+skill.id+'Good" ' + oThis.iif(item==1,"checked","") + ' /><label for="radSkillRating_'+skill.id+'Good">Good</label></td>';
	                    HTML        += '    <td><input class="radio" value="2" type="radio" onclick=eval(' + oThis.varName + '.setItem("' +skill.id + '","2")' + ') name="radSkillRating_'+ skill.id+'" id="radSkillRating_'+skill.id+'Strong" ' + oThis.iif(item==2,"checked","") + '/><label for="radSkillRating_'+skill.id+'Strong">Strong</label></td>';
	                    HTML        += '    <td><input class="radio" value="3" type="radio" onclick=eval(' + oThis.varName + '.setItem("' +skill.id + '","3")' + ') name="radSkillRating_'+ skill.id+'" id="radSkillRating_'+skill.id+'Master" ' + oThis.iif(item==3,"checked","") + '/><label for="radSkillRating_'+skill.id+'Master">Master</label></td>';
                    }
                }
	            
	            HTML        += '</tr>';
		    });

		    HTML        += '</tbody>';
		    HTML        += '</table>';
		    HTML        += '</div>';
		    this.container.innerHTML = HTML;
	    },
	    renderCompany:function(){
	        var counter = 0;
	        var HTML    = '';
	        HTML        += '<div class="gridContain">';
	        HTML        += '<table class="grid" cellpadding="0" cellspacing="0">';
	        HTML        += '<thead><tr><td></td><th>Skill</th></tr></thead>';
	        HTML        += '<tbody>';
	        var item    = null;
	        var oThis = this;
	        
		    this.items.each(function(skill) {
		        counter = counter + 1;
		        if(counter % 2){
		            HTML        += '<tr class="alternate" style="border-bottom:1px solid black;background-color:white">';
		        }else{
		            HTML        += '<tr class="alternate" style="border-bottom:1px solid black">';
		        }
		        var isChecked = false;
		        
//		        if (!Browser.Engine.trident){
    	            item = oThis.myData.get(skill.id);
                    if(item==1){
    	                isChecked = true;
                    }
//		        }else{
//		            item = null;
//		        }

		        
                var evalString=oThis.varName + '.setItem("' +skill.id + '",(this.checked?1:0));' + oThis.varName + '.save();';
	            HTML        += '    <td class="column1"><label for="radSkillRating_'+skill.id+'na">' + skill.name + '</label>' +  '</td>';
	            if(isChecked){
	                HTML        += '    <td><input class="radio" checked onclick='+evalString+' value="0" type="checkbox" name="radSkillRating_'+ skill.id+'" id="radSkillRating_'+skill.id+'na" ' + oThis.iif(skill.rating==0,"checked","") + '/></td>';
	            }else{
	                HTML        += '    <td><input class="radio" onclick='+evalString+' value="0" type="checkbox" name="radSkillRating_'+ skill.id+'" id="radSkillRating_'+skill.id+'na" ' + oThis.iif(skill.rating==0,"checked","") + '/></td>';
	            }
	            
	            HTML        += '</tr>';
		    });
		    HTML        += '</tbody>';
		    HTML        += '</table>';
		    HTML        += '</div>';
		    this.container.innerHTML = HTML;
		    //alert(this.container.outerHTML);
	    },
        render:function(){
            if(this.CandidateId==""){
                this.renderCompany();
            }else{
                this.renderCandidate();
            }
        },
        ajaxFailure:function(){
            alert("Failure");
        },
        save:function(){
            $("hiddenSkillValue").value = this.toString();
        },
        toString:function(){
            var retval = "";
            this.myData.each(function(value,key){
                retval = retval+ key+":"+value+"|";
            });
            return retval;
        },
        getSelectedSkillsCount:function(){
            var retval = 0;
            this.myData.each(function(value,key){
                if(value!="0"){
                    retval = retval + 1;
                }
            });
            return retval;
        }
      });