topicelement = null;
subjectelement = null;
subjectdualjobj = null;
subjectextrajobj = null;
subjectloaded = false;

$(document).ready(function(){
		
	var fieldName = "Document Topic"
	var theSelect = getTagFromIdentifierAndTitle("select","Lookup",fieldName);
	if (theSelect != null) { 
		topicelement = theSelect;
	} else {
	    topicelement = getTagFromIdentifierAndTitle("input","",fieldName);
	}	
	
	if(topicelement == null) {
		return;
	}
	
	var fieldName = "Document Subject"
	var theSelect = getTagFromIdentifierAndTitle("select","Lookup",fieldName);
	if (theSelect != null) { 
		subjectelement = theSelect;
	} else {
	    subjectelement = getTagFromIdentifierAndTitle("input","",fieldName);
	    subjectdualjobj = $(subjectelement).next();
	}
	
	$(subjectelement).hide()				
	$(subjectelement).next().hide()	
	subjectextrajobj = $('<select id="' + subjectelement.id + 'select"><option value="0">(None)</option></select>');
	subjectextrajobj.prependTo($(subjectelement).parent());	

    $(topicelement).change(TopicChange);  
    $(subjectextrajobj).change(function() {
    	if(subjectdualjobj != null) {
        	$(subjectelement).val('')   
            $('input#SPDocument_x0020_Subject_Hidden').val(0)
    		var newvalue = $(subjectextrajobj).val();
            for(var i=0; i<gTopicData.length; i++) {
                for (var j=0; j<gTopicData[i].subjects.length; j++) { 
                    var subject = gTopicData[i].subjects[j];
                    if(subject.id == newvalue) {
                        $(subjectelement).val(subject.title);   		                        
                        $('input#SPDocument_x0020_Subject_Hidden').val(subject.id)
                    }
                }      
            }
    	} else {
        	$(subjectelement).val($(subjectextrajobj).val())
        }
    });   
    TopicChange();   
});
      	
function TopicChange() {
	var topicvalue = $(topicelement).val();     
	var subjectvalue = ''; 	
	if(!subjectloaded) {
  		subjectvalue = $(subjectelement).val();     		
  	}
    var options = '<option value="0">(None)</option>';      
    for(var i=0; i<gTopicData.length; i++) {
        if(gTopicData[i].id == topicvalue) {
            for (var j=0; j<gTopicData[i].subjects.length; j++) { 
                var subject = gTopicData[i].subjects[j];
                options += '<option value='+subject.id+'>'+subject.title+'</option>';
            }      
        }
    }
    $(subjectextrajobj).html(options);
	if(!subjectloaded) {
		subjectloaded = true;
        $(subjectextrajobj).val(subjectvalue);	      		
  	} else {
        $(subjectextrajobj).val('0');	
        $(subjectelement).val('')   
         $('input#SPDocument_x0020_Subject_Hidden').val('0')
  	}
}

function getTagFromIdentifierAndTitle(tagName, identifier, title) {
  var len = identifier.length;
  var tags = document.getElementsByTagName(tagName);
  for (var i=0; i < tags.length; i++) {
    var tempString = tags[i].id;
    if (tags[i].title == title && (identifier == "" || tempString.indexOf(identifier) == tempString.length - len)) {
      return tags[i];
    }
  }
  return null;
}
