﻿var columnCount = 0;
var maxColumn = 9
var reg_greater_e = /\>=/;
var reg_smaller_e = /\<=/;
var reg_between =  /\|/;
var reg_greater = /\>/;
var reg_smaller = /\</;
var reg_equal =  /\=/;
var reg_like =  /\%/;

$j(document).ready(function() {
	if($j('#comparisonTbl').attr('id'))
	{        
		// Set count of columns
		columnCount = $j('#comparisonTbl tbody tr:eq(0) td.tblData').size();
		// Set the first displayed column as first column of product
		SetFirstIndex(1);
		var $t = jQuery.noConflict();
		$t('#comparisonTbl').tablesorter({ debug: false, widgets: ['zebra'] });
		
		InitalFilterIndex();
		LoadFilterProductCount()
		// Navigater button events handler
		$j('#comparisonTbl .first a').click( MoveFirst);
		$j('#comparisonTbl .previous a').click( MovePrevious);
		$j('#comparisonTbl .next a').click( MoveNext);
		$j('#comparisonTbl .lastTop a, #comparisonTbl .lastBtm a').click( MoveLast);
		
		//Compare button events
		$j('#btnCompare_Btm, #btnCompare_Top').click(function(){
			var currentLocation = window.location;
			var queryString = '?result=true&products=';
			var productIds = new Array();
			
			$j('#comparisonTbl tbody tr').find('td:eq(0)').each(function(){
				if($j(this).children('input[type="checkbox"]:eq(0)').attr('checked') == true)
				{
					productIds.push($j(this).find('input[name="productid"]:eq(0)').val());
				}
			});
			
			if(productIds.length  < 2)
			{
				$j('#tblInstructionsId p:eq(0)').addClass('error');
			}
			else
			{
				window.location = $j('#hfResultUrl').val() + queryString + productIds;
			}
		});
		
		// Filter button events handler
		$j('#filterWrapper li a').click(FilterHandler);
		$j('#deselectAllFilters').click(FilterHandler);
		$j('#closeAllFilters').click(FilterHandler);
		
		// before sort table set back the BorderBottom for last child
		//assign the sortEnd event 
		$j('#comparisonTbl').bind('sortStart',function(){
			$j('#comparisonTbl tbody tr:last-child').find('td').each(function (){
				$j(this).removeClass('noBorderBottom');
			});
		}).bind('sortEnd',function() { 
			TableButtomConfig();
			
		});
		
		TableButtomConfig();
	}
});

function InitalFilterIndex()
{
	$j('#filterWrapper .filter h5').each(function(){
		var filterHeadHidden = $j(this).next('input[name = "filterIndex"]');
		var filterName = $j.trim($j(this).html().toLowerCase());
		$j('#comparisonTbl thead tr:eq(1) th').each(function(){
			if(filterName == $j.trim($j(this).html().toLowerCase()))
			{
				filterHeadHidden.val($j($j(this).parent().children()).index(this));
			}
		});
	});
}

function LoadFilterProductCount()
{
	$j('#filterWrapper div.filter').each(function(){
		var filterIndex = parseFloat($j(this).children('input[name="filterIndex"]').val());
		$j(this).find('ul.filterItems li').each(function(){
			var conidition = $j.trim($j(this).children('input[name="filterCondition"]').val()).toLowerCase();
			var itemCount = 0;			
			$j('#comparisonTbl tbody tr.productdisplay').find('td:eq(' +filterIndex +')').each(function(){
				if(reg_between.test(conidition))
				{
					var _conidition = conidition.split(reg_between);
					_conidition[0] =  parseFloat($j.trim(_conidition[0]));
					_conidition[1] =  parseFloat($j.trim(_conidition[1]));
					var columnValue = parseFloat($j.trim($j(this).html()));
					if(columnValue >= _conidition[0] && columnValue <= _conidition[1])
					{
						
						itemCount += 1;
					}
				}
				else
				{
					if(reg_greater_e.test(conidition))
					{
						var _conidition = ("none" + conidition).split(reg_greater_e);
						_conidition[1] =  parseFloat($j.trim(_conidition[1]));
						var columnValue = parseFloat($j.trim($j(this).html()));
						if(columnValue >= _conidition[1])
						{
							itemCount += 1;
						}
					}
					else
					{
						if(reg_smaller_e.test(conidition))
						{
							var _conidition = ("none" + conidition).split(reg_smaller_e);
							_conidition[1] =  parseFloat($j.trim(_conidition[1]));
							var columnValue = parseFloat($j.trim($j(this).html()));		
							if(columnValue <= _conidition[1])
							{
								itemCount += 1;
							}
						}
						else
						{
							if(reg_greater.test(conidition))
							{
								var _conidition = ("none" + conidition).split(reg_greater);
								_conidition[1] =  parseFloat($j.trim(_conidition[1]));
								var columnValue = parseFloat($j.trim($j(this).html()));
								if(columnValue > _conidition[1])
								{
									itemCount += 1;
								}
							}
							else
							{
								if(reg_smaller.test(conidition))
								{
									var reg = /\</;
									var _conidition = ("none" + conidition).split(reg);
									_conidition[1] =  parseFloat($j.trim(_conidition[1]));
									var columnValue = parseFloat($j.trim($j(this).html()));		
									if(columnValue < _conidition[1])
									{
										itemCount += 1;
									}
								}
								else
								{
									if(reg_equal.test(conidition))
									{
										var _conidition = ("none" + conidition).split(reg_equal);
										_conidition[1] =  $j.trim(_conidition[1]).toLowerCase();
										var columnValue = $j.trim($j(this).html()).toLowerCase();
										if(columnValue == _conidition[1])
										{
											itemCount += 1;
										}
									}
									else
									{
										if(reg_like.test(conidition))
										{
											var _conidition = (conidition + 'none').split(reg_like);
											_conidition[1] =  $j.trim(_conidition[1]).toLowerCase();
											var columnValue = $j.trim($j(this).html()).toLowerCase();
											var newcolumnValue = columnValue;
											var reg_like_conidition =   _conidition[0];
											newcolumnValue = newcolumnValue.replace(reg_like_conidition , '');
											
											if(newcolumnValue != columnValue)
											{
												itemCount += 1;
											}
										}
										else
										{
											var value = $j(this).html().replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
											if($j.trim(value).toLowerCase() == conidition)
											{
												itemCount += 1;
											}
										}
									}
								}
							}
						}
					}
				}
				
				
			});
			
			$j(this).find('a').html($j(this).find('input[name="filterDisplayName"]').val() + ' (' +  itemCount + ')') ;
			if(itemCount == 0)
			{
				$j(this).find('a').addClass('disabled');
			}
			else
			{
				$j(this).find('a').removeClass('disabled');
			}
		});
	});
}

function FilterHandler()
{	
	if($j(this).hasClass('disabled'))
	{
		return false;
	}

	var updatingImg = $j('#comparisonTblWrapper div.overlayWrapper');
	var filterArray = new Array();
	$j('#filterWrapper .filter li a').each(function(){
		if($j(this).hasClass('selected')){
			var filterQuery = $j(this).parents('div[class = "filter"]').children('input[name="filterIndex"]').val() + '_' +  GetFilterCondition(this);
			filterArray.push(filterQuery);
		}
	});

	filterCount = filterArray.length;
	$j('#comparisonTbl tbody tr').each(function()
	{
		var result = true;
		for(i = 0 ; i < filterCount; i ++)
		{
			filterBox = filterArray[i].split('_');
			var columnIndex = filterBox[0];
			var conidition = filterBox[1];
			if(reg_between.test(conidition))
				{
					var _conidition = conidition.split(reg_between);
					_conidition[0] =  parseFloat($j.trim(_conidition[0]));
					_conidition[1] =  parseFloat($j.trim(_conidition[1]));
					var columnValue = parseFloat($j.trim($j(this).find('td:eq('+ columnIndex+')').html()));
					if(columnValue >= _conidition[0] && columnValue <= _conidition[1])
					{
						
					}
					else
					{
						result = false;
						break;
					}
				}
				else
				{
					if(reg_greater_e.test(conidition))
					{
						var _conidition = ("none" + conidition).split(reg_greater_e);
						_conidition[1] =  parseFloat($j.trim(_conidition[1]));
						var columnValue = parseFloat($j.trim($j(this).find('td:eq('+ columnIndex+')').html()));
						if(columnValue >=_conidition[1])
						{
									
						}
						else
						{
							result = false;
							break;
						}
					}
					else
					{
						if(reg_smaller_e.test(conidition))
						{
							var _conidition = ("none" + conidition).split(reg_smaller_e);
							_conidition[1] =  parseFloat($j.trim(_conidition[1]));
							var columnValue = parseFloat($j.trim($j(this).find('td:eq('+ columnIndex+')').html()));
												
							if(columnValue <= _conidition[1])
							{
										
							}
							else
							{
								result = false;
								break;
							}
						}
						else
						{
							if(reg_greater.test(conidition))
							{
								var _conidition = ("none" + conidition).split(reg_greater);
								_conidition[1] =  parseFloat($j.trim(_conidition[1]));
								var columnValue = parseFloat($j.trim($j(this).find('td:eq('+ columnIndex+')').html()));
								if(columnValue > _conidition[1])
								{
									
								}
								else
								{
									result = false;
									break;
								}
							}
							else
							{
								if(reg_smaller.test(conidition))
								{
									var reg = /\</;
									var _conidition = ("none" + conidition).split(reg);
									_conidition[1] =  parseFloat($j.trim(_conidition[1]));
									var columnValue = parseFloat($j.trim($j(this).find('td:eq('+ columnIndex+')').html()));
													
									if(columnValue < _conidition[1])
									{
										
									}
									else
									{
										result = false;
										break;
									}
								}
								else
								{
									if(reg_equal.test(conidition))
									{
										var _conidition = ("none" + conidition).split(reg_equal);
										_conidition[1] =  $j.trim(_conidition[1]).toLowerCase();
										var columnValue = $j.trim($j(this).find('td:eq('+ columnIndex+')').html()).toLowerCase();
										if(columnValue == _conidition[1])
										{
											
										}
										else
										{
											result = false;
											break;
										}
									}
									else
									{
										
										if(reg_like.test(conidition))
										{
											var _conidition = (conidition + 'none').split(reg_like);
											_conidition[1] =  $j.trim(_conidition[1]).toLowerCase();
											var columnValue = $j.trim($j(this).find('td:eq('+ columnIndex+')').html()).toLowerCase();
											var newcolumnValue = columnValue;
											var reg_like_conidition =   _conidition[0];
											newcolumnValue = newcolumnValue.replace(reg_like_conidition , '');
											
											if(newcolumnValue != columnValue)
											{
												
											}
											else
											{
												result = false;
												break;
											}
										}
										else
										{
											var value = $j(this).find('td:eq('+ columnIndex+')').html().replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
											if($j.trim(value).toLowerCase() == conidition)
											{
												
											}
											else
											{
												result = false;
												break;
											}
										}
									}
								}
							}
						}
					}
				}	
		}
		
		if(result)
		{
			$j(this).show();
			$j(this).removeClass('producthide');
			$j(this).addClass('productdisplay');
		}
		else
		{
			$j(this).hide();
			$j(this).addClass('producthide');
			$j(this).removeClass('productdisplay');
		}
	});
	
	$j('#hfFilterCondition').val(filterArray);
	LoadFilterProductCount();
	TableButtomConfig();
}

function GetFilterCondition(filter)
{
	return $j.trim($j(filter).next().val()).toLowerCase();
}

//Table columns movement

function SetFirstIndex(value)
{
	$j('#hfCurrentFirst').val(value);
}

function GetFirstIndex()
{
	return  parseInt($j('#hfCurrentFirst').val());
}

function TableButtomConfig()
{
	// update prompt message both top and buttom
	var  columnAllCount =  $j('#comparisonTbl tbody tr:eq(0) td.tblData').size();
	var current =  $j('#listview_config input.current');
	var  columnCurrentCount =  $j('#comparisonTbl tbody tr:eq(0) td[listview="'+current.val() +'"]').size();
	
	var howManyPrev = 0;
	current.prevAll().each(function(){
		var index = $j(this).val();
		howManyPrev += $j('#comparisonTbl tbody tr:eq(0) td[listview="'+index +'"]').size();
	});	
	
	var promptString = "Showing columns " + (howManyPrev + 1)+ " - " + (howManyPrev +  columnCurrentCount)+  " of "  + columnAllCount;
	
	$j('#comparisonTbl thead tr:eq(0) td:eq(1) ul li:eq(2)').html(promptString);
	$j('#comparisonTbl tfoot tr:eq(1) td:eq(1) ul li:eq(2)').html(promptString);
	
	var  productNameColumn = $j('#comparisonTbl thead tr.tblSortRow td:eq(0)');
	productNameColumn.removeClass('sortDown');
	productNameColumn.removeClass('sortUp');
}

function IsOnlyOneSlide() {
    //alert($j('#listview_config input.firstlast').length);
    if ($j('#listview_config input.firstlast').length > 0) {
        return true;
    }
}

function MoveNext()
{
	var lastIndex = $j('#listview_config input.last').val();
	var current =  $j('#listview_config input.current');

	if (IsOnlyOneSlide() || current.val() == lastIndex)
	{
		return false;
	}
	var next = current.next();
	var nextIndex = current.next().val();
	$j('#comparisonTbl thead tr:eq(1) th[listview = "'+  current.val() +'"], #comparisonTbl thead tr.tblSortRow td[listview="'+current.val()+'"], #comparisonTbl tbody tr td[listview="'+current.val()+'"], #comparisonTbl tfoot tr:eq(0) td[listview="'+current.val()+'"]').hide();
	$j('#comparisonTbl thead tr:eq(1) th[listview = "'+  nextIndex +'"], #comparisonTbl thead tr.tblSortRow td[listview="'+nextIndex+'"], #comparisonTbl tbody tr td[listview="'+nextIndex+'"], #comparisonTbl tfoot tr:eq(0) td[listview="'+nextIndex+'"]').show();
	
	current.removeClass('current');
	next.addClass('current');
	
	TableButtomConfig();
	
	return false;
}

function MovePrevious()
{
	var firstIndex = $j('#listview_config input.first').val();
	var current =  $j('#listview_config input.current');

	if (IsOnlyOneSlide() || current.val() == firstIndex)
	{
		return false;
	}
	
	var prev = current.prev();
	var prevIndex = current.prev().val();
	$j('#comparisonTbl thead tr:eq(1) th[listview = "'+  current.val() +'"], #comparisonTbl thead tr.tblSortRow td[listview="'+current.val()+'"], #comparisonTbl tbody tr td[listview="'+current.val()+'"], #comparisonTbl tfoot tr:eq(0) td[listview="'+current.val()+'"]').hide();
	$j('#comparisonTbl thead tr:eq(1) th[listview = "'+  prevIndex +'"], #comparisonTbl thead tr.tblSortRow td[listview="'+prevIndex+'"], #comparisonTbl tbody tr td[listview="'+prevIndex+'"], #comparisonTbl tfoot tr:eq(0) td[listview="'+prevIndex+'"]').show();
	
	current.removeClass('current');
	prev.addClass('current');
	
	TableButtomConfig();
	
	return false;
}

function MoveFirst()
{
	var firstIndex = $j('#listview_config input.first').val();
	var current =  $j('#listview_config input.current');
	if (IsOnlyOneSlide() || current.val() == firstIndex)
	{
		return false;
	}
	
	$j('#comparisonTbl thead tr:eq(1) th[listview = "'+  current.val() +'"], #comparisonTbl thead tr.tblSortRow td[listview="'+current.val()+'"], #comparisonTbl tbody tr td[listview="'+current.val()+'"], #comparisonTbl tfoot tr:eq(0) td[listview="'+current.val()+'"]').hide();
	$j('#comparisonTbl thead tr:eq(1) th[listview = "'+  firstIndex +'"], #comparisonTbl thead tr.tblSortRow td[listview="'+firstIndex+'"], #comparisonTbl tbody tr td[listview="'+firstIndex+'"], #comparisonTbl tfoot tr:eq(0) td[listview="'+firstIndex+'"]').show();
	current.removeClass('current');
	$j('#listview_config input.first').addClass('current');
	
	TableButtomConfig();
	
	return false;
}

function MoveLast()
{
	var lastIndex = $j('#listview_config input.last').val();
	var current =  $j('#listview_config input.current');

	if (IsOnlyOneSlide() || current.val() == lastIndex)
	{
		return false;
	}
	
	$j('#comparisonTbl thead tr:eq(1) th[listview = "'+  current.val() +'"], #comparisonTbl thead tr.tblSortRow td[listview="'+current.val()+'"], #comparisonTbl tbody tr td[listview="'+current.val()+'"], #comparisonTbl tfoot tr:eq(0) td[listview="'+current.val()+'"]').hide();
	$j('#comparisonTbl thead tr:eq(1) th[listview = "'+  lastIndex +'"], #comparisonTbl thead tr.tblSortRow td[listview="'+lastIndex+'"], #comparisonTbl tbody tr td[listview="'+lastIndex+'"], #comparisonTbl tfoot tr:eq(0) td[listview="'+lastIndex+'"]').show();
	
	current.removeClass('current');
	$j('#listview_config input.last').addClass('current');
	
	TableButtomConfig();
	
	return false;
}






