// Constant variables
var SUBSCRIPTION_CAT_VALUE = '3-7';
var FREE_CAT_VALUE = '3-6';
var CERTIFIED_CAT_VALUE = '2-4';
var PLATFORM_CATEGORY_ID = '1';

// Global variables
var page_size = 10;
var page = 0;

// a universal way to get cookie
function get_cookie(cookie_name) {
  var results = document.cookie.match ( '(^|;) ?' + cookie_name + '=([^;]*)(;|$)' );
  if ( results )
    return ( unescape ( results[2] ) );
  else
    return null;
}
// function to calculate count for each category options
function get_filtered_data(checked_filters,catindex,itemindex,catid,itemid) {
	var count = 0;
	for (i = 0; i < PartnerData.length; i++) {
		// make sure current option is available
		if (PartnerData[i].cat_values.indexOf(',' + catid + '-' + itemid + ',') >= 0) {
			// loop trough all other categories (checked ones)
			ok = true;	
			for (j = 0; j < checked_filters.length; j++) {
				ok2 = false;
				if (j != catindex) {
					for (k = 0; k < checked_filters[j].length; k++) {
						if (PartnerData[i].cat_values.indexOf(',' + checked_filters[j][k] + ',')>=0) {
							ok2= true;
							break;
						}
					}
					if (!ok2) {
						ok = false;
						break;
					}
				}
			}
			if (ok) {
				count++;
			}
		}
	}
	return count;
}

// sort
function callbackFuncAZ(a,b) {
	return (a.company_name <= b.company_name) ? -1 : 1;
}
function callbackFuncZA(a,b) {
	return (a.company_name >= b.company_name) ? -1 : 1;
}
function callbackFuncDEF(a,b) {
	return (a.order <= b.order) ? -1 : 1;
}
function sort_results() {
	switch( jQuery("#partner_sort").val()) {
		case "az":
			PartnerData.sort(callbackFuncAZ);
			break;
		case "za":
			PartnerData.sort(callbackFuncZA);
			break;
		case "d":
			PartnerData.sort(callbackFuncDEF);
			break;
	}
}

function go_to_partner(locat) {
	if (locat > 0) { 
		document.location.href = 'default_mvc.cfm?view=partnerview&partner_id=' + locat; 
	}		
}

function drop_down_list() {
	// alert(1);
	PartnerData.sort(callbackFuncAZ);
	var select_html = '<select onchange="go_to_partner(this.value)" style="width: 152px;"><option value="0">Select a partner</option>';
	for (var i = 0; i < PartnerData.length; i++) {
		select_html += '<option value="' + PartnerData[i].partner_id + '">' + PartnerData[i].company_name + '</option>';	
	}
	select_html += '</select>';	
	// alert(select_html);
	jQuery("#select_div").html(select_html);
	
}

var checked_filters = [];
var checked_filters_to_save = [];
function build_checked_filters() {
	// create an array from checked category options
	checked_filters = [];
	checked_filters_to_save = [];
	var checked_filters_no = -1;
	for (i = 0; i < Categories.length; i++) {
		checked_filters_no++;
		checked_filters[checked_filters_no] = [];
		checked_filters_to_save[checked_filters_no] = [];
		Categories[i].allUnchecked = true;
		for (j = 0; j < Categories[i].children.length; j++) {
			if (Categories[i].type == 'r') {
				if (Categories[i].children[j].isChecked == 1) {
					checked_filters[checked_filters_no][checked_filters[checked_filters_no].length] = Categories[i].id + '-' + Categories[i].children[j].id;
					// if (Categories[i].children[j].isChecked == 1)
					checked_filters_to_save[checked_filters_no][checked_filters[checked_filters_no].length] = Categories[i].id + '-' + Categories[i].children[j].id;
					Categories[i].allUnchecked = false;
				}
			}
			else {
				if (Categories[i].children[j].isChecked == 1) {
					checked_filters[checked_filters_no][checked_filters[checked_filters_no].length] = Categories[i].id + '-' + Categories[i].children[j].id;
					checked_filters_to_save[checked_filters_no][checked_filters[checked_filters_no].length] = Categories[i].id + '-' + Categories[i].children[j].id;
					Categories[i].allUnchecked = false;
				}
			}
		}

		if (Categories[i].type == 'c') {
			checked_filters[checked_filters_no][checked_filters[checked_filters_no].length] = Categories[i].id + '-oth';
			checked_filters_to_save[checked_filters_no][checked_filters[checked_filters_no].length] = Categories[i].id + '-oth';
		}

		if (Categories[i].allUnchecked) {
			for (j = 0; j < Categories[i].children.length; j++) {
				checked_filters[checked_filters_no][checked_filters[checked_filters_no].length] = Categories[i].id + '-' + Categories[i].children[j].id;
			}
		}
			
	}
}

// main function to build the results
function render_results(page_no, direct) {
	
	if(direct == 0) {
		document.cookie = "ip_pagination_cv="+page_no+";";
	}

	// search job
	var filtered_PartnerData = [];
	var ok = true;
	var ok2 = true;
	for (i = 0; i < PartnerData.length; i++) {

		ok = true;	
		for (j = 0; j < checked_filters.length; j++) {

			ok2 = false;
			for (k = 0; k < checked_filters[j].length; k++) {
				
				if (PartnerData[i].cat_values.indexOf(',' + checked_filters[j][k] + ',') >= 0) {
					ok2 = true;
					break;
				}
			}

			if (!ok2) {
				ok = false;
				break;
			}
		}
		if (ok) {
			filtered_PartnerData[filtered_PartnerData.length] = i;
		}
	}


	// calculate counts
	var count = 0;
	// loop the main categories
	for (jj = 0; jj < Categories.length; jj++) {
		// loop sub cates
		for (kk = 0; kk < Categories[jj].children.length; kk++) {
			count = get_filtered_data(checked_filters,jj,kk,Categories[jj].id,Categories[jj].children[kk].id);
			jQuery("#span_" + Categories[jj].id + '-' + Categories[jj].children[kk].id).html('(' + count + ')');
		}
	}			
	
	if (filtered_PartnerData == 0) {
	
		jQuery("#pagination_1").html('');
		jQuery("#pagination_2").html('');
		jQuery("#pagination_showing").html('');
	
		jQuery("#partner_results").html('<div id="partner_results"><p style="color:#F79319; font-size:14px; font-weight:bold; text-align: center; padding: 100px 0; border-top:1px solid #E8E8E8;">No matches found</p></div>');
		
	} else {
	
		// pagination
		if (page_size == -1) {
			jQuery("#pagination_1").html('');
			jQuery("#pagination_2").html('');
	
			var st = 0;
			var en = filtered_PartnerData.length;
		} else {
			var total_items = filtered_PartnerData.length;
			
			var total_pages = total_items/page_size;
			if (parseInt(total_pages) != total_pages) {
				total_pages = parseInt(total_pages) + 1;
			}

			page_no = get_cookie('ip_pagination_cv');

			var page_no_int = parseInt(page_no);
			
			pag_html = '<span class="first paginate_button" onclick="render_results(0, 0)">&laquo; First</span>';
			pag_html += '<span class="previous paginate_button" onclick="render_results(' + (page_no_int-1 < 0?0:page_no_int-1) + ', 0)">Previous</span><span>';
			
			for (i = 0; i < total_pages; i++) {
				if (i == page_no_int) {
					pag_html += '<span class="paginate_active">' + (i + 1) + '</span>';
				} else {
					pag_html += '<span class="paginate_button" onclick="render_results(' + i + ',0)">' + (i + 1) + '</span>';
				}
			}
			
			pag_html += '</span><span class="next paginate_button" onclick="render_results(' + ((page_no_int + 1 >= total_pages) ? total_pages-1 : page_no_int + 1) + ', 0)">Next</span>';
			pag_html += '<span class="last paginate_button" onclick="render_results(' + (total_pages-1) + ', 0)">Last &raquo;</span>';
			
			jQuery("#pagination_1").html(pag_html);
			jQuery("#pagination_2").html(pag_html);
	
			var st = page_no_int*page_size;
			var en = (page_no_int + 1)*page_size;
			if (en > filtered_PartnerData.length) {
				en = filtered_PartnerData.length;
			}

		}
		jQuery("#pagination_showing").html('Showing ' + (st + 1) + ' - ' + (en) + ' of ' + filtered_PartnerData.length);
		
		// Build Partner Card
		var html = '';
		for (y = st; y < en; y++) {
			i = filtered_PartnerData[y]*1;
			
			html += '<div class="panel clearfix">';
			html += '	<div class="image_holder">';
			html += '		<a href="default_mvc.cfm?view=partnerview&partner_id=' + PartnerData[i].partner_id + '" style="text-decoration: none;">';
			
			if(PartnerData[i].logo == "")
				html += '			<img src="/Images/IntegratedPartners/no-pic.png" />';
			else	
				html += '			<img src="/Images/IntegratedPartners/' + PartnerData[i].logo + '" />';
			
			
			if (PartnerData[i].cat_values.indexOf(',' + CERTIFIED_CAT_VALUE + ',') >= 0) {
				// Certified badge
				html += '			<br/><span class="certified_partner">CERTIFIED PARTNER</span>';
			}
			html += '		</a>';
			html += '	</div>';
			html += '	<div class="text_holder">';
			html += '		<p class="title"><a href="default_mvc.cfm?view=partnerview&partner_id=' + PartnerData[i].partner_id + '">' + PartnerData[i].company_name + '</a></p>';
			html += '		<p class="subtitle">' + PartnerData[i].product_name;
			if (PartnerData[i].since != '') {
				html += '<span class="sep">|</span><span class="since">' + PartnerData[i].since + '</span></p>';
			}
			html += '		<p class="features">';
			html += '			<span class="bold">Features:</span> ' + PartnerData[i].top_features;
			html += '		</p>';
			html += '		<p class="platforms">';
			
			// cost
			if (PartnerData[i].cat_values.indexOf(',' + SUBSCRIPTION_CAT_VALUE + ',') >= 0) {
				html += '			<span class="bold">Cost:</span> Subscription';
				var cost_displayed = 1;
			}
			else if(PartnerData[i].cat_values.indexOf(',' + FREE_CAT_VALUE + ',') >= 0) {
				html += '			<span class="bold">Cost:</span> Free';
				var cost_displayed = 1;			
			} else {
				//Do Nothing
				var cost_displayed = 0;
			}

			// platform
			if(cost_displayed == 1) {
				html += '			<span class="bold extra_space">Platform:</span>';
			}
			else {
				html += '			<span class="bold">Platform:</span>';
			}
			
			for (j = 0; j < Categories[0].children.length; j++) {
				if (PartnerData[i].cat_values.indexOf(',' + PLATFORM_CATEGORY_ID + '-' + Categories[0].children[j].id + ',') >= 0) {
					html += '<span class="platform_icon ' + Categories[0].children[j].name + '_icon">' + Categories[0].children[j].name + '</span>';
				}
			}
			
			html += '		</p>';
			html += '	</div>';
			html += '</div>	';
		}
		jQuery("#partner_results").html(html);
	}
}

function build_top_clients() {
	var top_html = '';
	var p;
	for (p = top_st; p < top_st + 4; p++) {
		i = top_partners[(p % top_partners.length)]*1;

		top_html += '<div class="panel' + ((PartnerData[i].is_featured > 0) ? ' featured' : '') + '">';
		top_html += '<a href="default_mvc.cfm?view=partnerview&partner_id=' + PartnerData[i].partner_id + '">';
		if (PartnerData[i].is_featured > 0) {
			top_html += '<span class="featured">Featured</span>';
		}
		top_html += '<table cellspacing=0 cellpadding=0><tr><td height=67 valign=bottom class="image_holder"><img src="/Images/IntegratedPartners/' + PartnerData[i].logo + '" height=40 /></td></tr></table>';
		top_html += '<span class="orange bold">' + PartnerData[i].product_name + '</span>';
		top_html += '<span>' + PartnerData[i].company_name + '</span>';
		top_html += '</a>';
		top_html += '<span class="since">' + PartnerData[i].since + '</span>';
		top_html += '</div>';
	}
	jQuery("#top_center_inner").html(top_html);

}

function cache_it() {
	 $.ajax({
		   type: "POST",
		   url: "cached_partners.cfm",
		   cache: false,
		   scriptCharset: "utf-8",
		   dataType: 'html',
		   data: "main=" + jQuery("#HMainDev").html().replace(/&laquo;/gi,'<!<').replace(/&raquo;/gi,'>!>').replace('&amp;','!amp;') + "&top=" + jQuery("#top_center_inner").html(),
		   success: function(msg) {
		     // alert( "Data Saved: " + msg );
		   },
		   error: function(XMLHttpRequest, textStatus, errorThrown) {
			 // alert("Error: " + textStatus)
		   }
		});
}

function save_options(is_reset) {
	$.ajax({
		   type: "POST",
		   url: "saved_options.cfm",
		   cache: false,
		   scriptCharset: "utf-8",
		   dataType: 'html',
		   data: (is_reset ? "reset=1" : "checked=" + checked_filters_to_save.join(',')),
		   success: function(msg) {
		     // alert( "Data Saved: " + msg );
		   },
		   error: function(XMLHttpRequest, textStatus, errorThrown) {
			 // alert("Error: " + textStatus)
		   }
		});
		
}

function collapse_panel(id) {
	if (jQuery('#a_' + id).hasClass('plus')) {
		jQuery('#a_' + id).removeClass('plus').addClass('minus');
		jQuery('#ul_' + id).show();
	} else if (jQuery('#ul_' + id + ' input:checked:not(.category_any)').length == 0) {
		jQuery('#a_' + id).removeClass('minus').addClass('plus');
		jQuery('#ul_' + id).hide();
	}
}	

// top banner
var top_st = 0;
var top_partners = [];

function load() {

	if (SessionPartnersFilters != "") {
		var remember_options = ',' + SessionPartnersFilters + ',';
		for (i = 0; i < Categories.length; i++) {
			for (j = 0; j < Categories[i].children.length; j++) {
				if (remember_options.indexOf("," + Categories[i].id + "-" + Categories[i].children[j].id + ",") >= 0) {
					Categories[i].children[j].isChecked = 1;
				}
				else {
					Categories[i].children[j].isChecked = 0;
				}
			}
		}
	}


	// making sure all partners have "other" checkbox, if they are not in
	// current one
	for (i = 0; i < PartnerData.length; i++) {
		for (j = 0; j < Categories.length; j++) {
			if (Categories[j].children[Categories[j].children.length-1].id == -1
					&& PartnerData[i].cat_values.indexOf(',' + Categories[j].id + '-') == -1) {
				PartnerData[i].cat_values += Categories[j].id + '--1,'
			}
		}
	}

	// Build Category Filter
	var cate_html = '';
	for (i = 0; i < Categories.length; i++) {
		if (SessionPartnersFilters.indexOf(',' + Categories[i].id + '-') > -1 && SessionPartnersFilters.indexOf(',' + Categories[i].id + '-') != SessionPartnersFilters.indexOf(',' + Categories[i].id + '-o')) {
			cate_html += '<a href="#" onclick="collapse_panel(' + Categories[i].id + ')" id="a_' + Categories[i].id + '" class="title minus">' + Categories[i].name + '</a>';
			cate_html += '<ul  id="ul_' + Categories[i].id + '">';
		}
		else {
			cate_html += '<a href="#" onclick="collapse_panel(' + Categories[i].id + ')" id="a_' + Categories[i].id + '" class="title plus">' + Categories[i].name + '</a>';
			cate_html += '<ul  id="ul_' + Categories[i].id + '" style="display: none">';
		}

		if (Categories[i].type == 'r') {
			cate_html += '	<li><input id="in_' + Categories[i].id + '-any" class="category_any" name="in_' + Categories[i].id + '" checked="checked"  i="' + i + '" j="-1" type="radio"><label for="in_' + Categories[i].id + '-any">Any <span id="span_' + Categories[i].id + '-any"></span></label></li>';
		}

		for (j = 0; j < Categories[i].children.length; j++) {
			if (Categories[i].type == 'r') {
				cate_html += '	<li ' + (Categories[i].children[j].id == -1?'style="display:none"' : '') + ' id="li_' + Categories[i].id + '-' + Categories[i].children[j].id + '"><input ' + (Categories[i].children[j].isChecked?'checked="checked"':'') + ' id="in_' + Categories[i].id + '-' + Categories[i].children[j].id + '" i="' + i + '" j="' + j + '" name="in_' + Categories[i].id + '" type="radio"><label for="in_' + Categories[i].id + '-' + Categories[i].children[j].id + '">' + Categories[i].children[j].name + ' <span id="span_' + Categories[i].id + '-' + Categories[i].children[j].id + '"></span></label></li>';
			} else {
				cate_html += '	<li id="li_' + Categories[i].id + '-' + Categories[i].children[j].id + '"><input ' + (Categories[i].children[j].isChecked?'checked="checked"':'') + ' id="in_' + Categories[i].id + '-' + Categories[i].children[j].id + '" i="' + i + '" j="' + j + '" name="in_' + Categories[i].id + '-' + Categories[i].children[j].id + '" type="checkbox"><label for="in_' + Categories[i].id + '-' + Categories[i].children[j].id + '">' + Categories[i].children[j].name + ' <span id="span_' + Categories[i].id + '-' + Categories[i].children[j].id + '"></span></label></li>';
			}
		}
		cate_html += '</ul>';
	}
	jQuery("#partner_categories").html(cate_html);
	// Open 0th panel by default
	if (jQuery('#a_1').hasClass('plus')) {
		collapse_panel(Categories[0].id);
	}

	// drop_down_list();
	sort_results();
	build_checked_filters();
	render_results(0);

	// top banner
	for (var i = 0; i < PartnerData.length; i++) {
		if (PartnerData[i].show_in_banner > 0) {
			top_partners.push(i);
		}
	}
	// if nothing found, show all
	if (top_partners.length == 0) {
		for (var i = 0; i < PartnerData.length; i++) {
			top_partners.push(i);
		}
	}
	build_top_clients();
	
	// if (SessionPartnersFilters == "")
	// cache_it();
}

$().ready(function() {
	// if (load_cached == 0)

		//initialize the pagination cookie
		document.cookie = "ip_pagination_cv="+page+";";

		load();
	
	
	// top changes
	jQuery("#right_arrow").click(function(e) {
		top_st +=4;
		build_top_clients();
	});
	jQuery("#left_arrow").click(function(e) {
		top_st -=4;
		while(top_st < 0 && top_partners.length > 0) {
			top_st += top_partners.length;
		}
		build_top_clients();
	});
	
	// category changes
	jQuery("#partner_categories input").click(function(e) {
	
		var i = jQuery(this).attr('i') * 1;
		var j = jQuery(this).attr('j') * 1;
	
		// checkbox
		if (jQuery(this).attr('type') == 'checkbox') {
			Categories[i].children[j].isChecked = (jQuery(this).attr('checked')?1:0);
		} 
		// radio
		else {
			// Any
			if (j == -1) {
				for (k = 0; k < Categories[i].children.length; k++)
					Categories[i].children[k].isChecked = 0; // (jQuery(this).attr('checked')?2:0);
			}
			else {
				for (k = 0; k < Categories[i].children.length; k++) {
					if (k == j) {
						Categories[i].children[k].isChecked = 1;
					} 
					else {
						Categories[i].children[k].isChecked = 0;
					}
				}
			}
		}

		build_checked_filters();
		render_results(0,0);
		save_options(false);			
	
	});		
	
});


function reset_filters() {
	for (var i = 0; i < Categories.length; i++) {
		for (var j = 0; j < Categories[i].children.length; j++) {
			Categories[i].children[j].isChecked = 0;
			jQuery("#in_" + Categories[i].id + "-" + Categories[i].children[j].id).removeAttr('checked');
		}
		if (Categories[i].type == 'r') {
			jQuery("#in_" + Categories[i].id + "-any").attr('checked','checked');
		}
	}
	build_checked_filters();
	render_results(0);
	save_options(true);			
}

