/* Refine search library */
$.getScript('/scripts/jquery.tinysort.min.js', function(){return true;});
Canvas8.refine = {
	criteria : {},
	chkbxTemplate : $.template(
		'<div class="select" id="dd_${id}"><table><tr><td width="110px;"><label for="${id}">${lbl}</label></td>' +
		'<td align="right"><input id="${id}" name="${pName}" type="checkbox" onclick="C8.refine.toggle(this);" value="${cVal}"/></td>${cLink}'
	),
	labelSort : function(a,b) { return a.value > b.value; },
	init : function () {
		for (var ii in Canvas8.refine.filter) {
			$('#filters-level-1').append(
				$.template('<div id="dd_${id}" class="start"><a href="#" id="${id}" onclick="return C8.refine.childrenOf(\'${id}\',1)">${id}</a></div>'),{id:ii});
		}
	},
	childrenOf : function(id,lvl) {
		var parent = eval('this.filter.' + id); // Find the parent item.
		var pName = id.indexOf('.') > 0 ? id.substring(0,id.indexOf('.')) : id;
		lvl++;
		for (var ii = lvl;ii < 5;ii++) $('#filters-level-'+ii).html('');
		for (var c in parent.children) {
			var cId = id+'.children.'+c;
			var cLink = (typeof parent.children[c].children == 'undefined') ? '' : '<td style="text-align:middle;padding:0 0 0 3px;"><a href="#" class="arrowRight" onclick="return C8.refine.childrenOf(\''+cId+'\','+lvl+');"></a></td>'; 
			var cVal = id.indexOf("Date") == 0 ? parent.children[c].range : parent.children[c].name;
			$('#filters-level-'+lvl).append(this.chkbxTemplate,{id:cId,lbl:parent.children[c].name,cVal:cVal,lvl:lvl,cLink:cLink,pName:pName});
			if (typeof this.criteria[cId] != 'undefined' && this.criteria[cId] != null) this.toggle(document.getElementById(cId),true); 
		}
		if (id.indexOf("Date") == -1) $('#filters-level-'+lvl+" div.select").tsort("label");
		return false;
	},
	toggle : function (el, checked) {
		if (el.type == 'checkbox') {
			if (typeof checked == 'undefined') checked = el.checked;
			else el.checked = checked;
			this.criteria[el.id] = checked ? el.value : null;
			this.toggleParent(el);
			// Date selection is unique, needs simpler code.
			if (el.id.indexOf("Date") == 0) { 
				$("#filters-level-2 input[@type=checkbox]").each(function(){
					if (this.id != el.id) { this.checked = false; C8.refine.criteria[this.id] = null; }
				}); 
			}
		}
	},
	toggleParent : function (el) {
		var pArr = el.id.split(".children.");
		pArr.pop();
		var pId = pArr.join(".children.");
		var pEl = document.getElementById(pId);
		if (el.checked) {
			$('#dd_' + pId).css("background-color","#e5e5e5")
			$('#dd_' + pId).css("border","1px solid #ccc");
		} else {
			this.criteria[el.id] = null;
			$('#dd_' + pId).css("background-color","#f7f7f7")
			$('#dd_' + pId).css("border","1px solid #f7f7f7");
		}
		if (pEl) {
			this.toggle(pEl, el.checked);
			this.criteria[pEl.id] = null; // Null out the parent value, the child takes precedence.
		}
	},
	toggleImage : function () {
		var heightStr = $('#showhide').css('height');
		try { 
			var height = parseInt(heightStr.substring(0,heightStr.indexOf('px')));
			if (height > 10) $('#plusMinus a').css("background-image","url(/styles/canvas8/images/icons/minus.gif) no-repeat top right");
			else $('#plusMinus a').css("background-image","url(/styles/canvas8/images/icons/plus.gif) no-repeat top right");
		} catch (e) {}
	},
	_tagName : function (name) {
		switch (name) {
			case 'Type' : return 'subtype'; 
			case 'Date' : return 'created';
			default : return name.toLowerCase();
		}
	},
	search : function (sParams) {
		
		var fArgs = true;
		if (typeof sParams == 'undefined') {
			fArgs = false;
			sParams = {start:0,max:12,refine:'true'};
		}
				
		for (var c in C8.refine.criteria) {
			if (C8.refine.criteria[c] != null && !fArgs) {
				var pName = c.indexOf('.') > -1 ? c.substring(0,c.indexOf('.')) : c;
				pName = C8.refine._tagName(pName);
				if (typeof sParams[pName] == 'undefined') sParams[pName] = C8.refine.criteria[c];
				else sParams[pName] += '|' + C8.refine.criteria[c];
			}
		}
		var kwdSrc = $('#keyword_or_source').val();
		if (kwdSrc.match(/\w/) && kwdSrc != 'Search') sParams['search'] = $('#keyword_or_source').val();
		switch (sParams['contenttype']) {
			case 'news' : C8.news.search(sParams); break;
			case 'rh' : C8.meta.rh(sParams); break;
			case 'mh' : C8.meta.mh(sParams); break;
			default : C8.content.search(sParams);
		}
		return false;
	},
	isDefaultValue : function (search) {
		var defaultSearch = false;
		if (search == 'Search' || C8.string.tidyQuotes(C8.string.trim(search)).length == 0) {
			defaultSearch = true ;	
		}
		return defaultSearch
	},
	repopulateChildren : function (criteria){

		var hasChildren = 'false';
		var sChildrenToClear = [];
        for (var c in criteria) {
            var pName = '';
            if (c.indexOf('.') > -1 ) {
                pName = c.substring(0,c.indexOf('.'));
                pName = C8.refine._tagName(pName);
                if (sChildrenToClear[pName] == null ) {
                	sChildrenToClear[pName] = pName;
                }
            }
        }
        for (var child in sChildrenToClear) {
        	delete criteria[child];
        }

        var sChildren = [];
        for (var c in criteria) {
            if (criteria[c] != null) {
                var pName = '';
                if (c.indexOf('.') > -1 ) {
                    pName = c.substring(0,c.indexOf('.'));
                    pName = C8.refine._tagName(pName);
                    
                    if (sChildren[pName] == undefined) {
                    	sChildren[pName] = criteria[c];
	                } else {
	                    var paramExists = false;
	                    
	                    if (sChildren[pName].indexOf("|") != -1) {
	                        var pArr = sChildren[pName].split("|");
	                        for (var s in pArr) {
	                            if (s == criteria[c]) {
	                                paramExists = true;
	                            }    
	                        }
	                        
	                        if (!paramExists) {
	                        	sChildren[pName] += '|' + criteria[c];
	                        }
	                    } else {
	                        if (sChildren[pName] != criteria[c]) {
	                        	sChildren[pName] += '|' + criteria[c];
	                        }
	                    }
	                }
                }
            }
        }       
        for (var child in sChildren) {
        	if ( sChildren[child] != undefined ) {
        		criteria[child] = sChildren[child];
        		hasChildren = 'true';
        	}
        }
        
        criteria['haschildren'] = hasChildren;
        return criteria;
	},
	update : function() {
		
		C8.refine.criteria = C8.refine.repopulateChildren(C8.refine.criteria);

		if (!C8.refine.isDefaultValue($('#keyword_or_source').val())) {
			C8.refine.criteria['search'] = C8.string.tidyQuotes(C8.string.trim($('#keyword_or_source').val()));
		} else {
			delete C8.refine.criteria['search'];
		}
		
		C8.refine.criteria['refine'] = 'true';

		if (C8.refine.criteria['haschildren'] == 'true' || C8.refine.criteria['search'] != undefined ) { 
			C8.history.update(C8.refine.criteria);
		}
		return false;
	}
};
$(function() { // Bind event handlers to the form and buttons.
	$('#rsForm').bind('submit',C8.refine.update);
	$('#rsForm .go').bind('click',C8.refine.update);
	$('#rsForm .button').bind('click',C8.refine.update);
});
