YAHOO.namespace('squarecompare');

YAHOO.squarecompare.initVoipDataTable = function(options) {

	var fields = [
	    {
	    	name: 'VoipProductId',
	    	internal: true
	    },
	    {
	    	name: 'MerchantSiteId',
	    	internal: true
	    },
	    {
	    	name: 'ContractMonths',
	    	internal: true
	    },
	    {
	    	name: 'MerchantSiteListingTypeId',
	    	internal: true
	    },
	    {
	    	name: 'EnhancedListingScore',
	    	internal: true
	    },
	    {
	    	name: 'FeePerClickTypeId',
	    	internal: true
	    },
	  	{
	   		name: 'Flagged',
	   		title: '<img src="/ext/silk/icons/flag_yellow.png" width="12" height="12">',
	   		width: 12,
	   		sortable: false,
	  		sizable: false,
	  		formatter: 'flagged'
	   	},
	    {
	   		name: 'MerchantSiteName',
	   		title: 'Company',
	   		sortable: true,
	  		sizable: true,
	  		formatter: 'merchantSiteName'
	   	},
	    {
	   		name: 'PlanName',
	   		title: 'Plan',
	   		group: 'basic',
	   		sortable: true,
	  		sizable: true,
	  		maxLength: 18,
	  		formatter: 'text'
	   	},
	 	{
	 		name: 'MonthlyFee',
	 		title: 'Monthly',
	   		group: 'basic',
	   		sortable: true,
	  		sizable: true,
	  		formatter: 'monthlyFee'
	 	},
	 	{
	 		name: 'SetupFee',
	 		title: 'Setup',
	   		group: 'basic',
	 		numberDecimals: 0,
	 		numberPrefix: '$',
	 		numberSuffix: '',
	   		sortable: true,
	  		sizable: true,
	  		formatter: 'number'
	 	},
	 	{
	 		name: 'FreeTypeName',
	 		title: 'Trial',
	   		group: 'feature-a',
	   		sortable: true,
	  		sizable: true
	 	},
	 	{
	 		name: 'InboundMinutes',
	 		title: 'Inbound',
	   		group: 'feature-a',
	 		numberDecimals: 0,
	 		numberPrefix: '',
	 		numberSuffix: ' min',
	   		sortable: true,
	  		sizable: true,
	  		formatter: 'number',
	  		magicValues: {
	   			999999: 'Unlimited|Be sure to check the fine print to determine if restrictions apply to this <i>Unlimited</i> value.'
	   		}
	 	},
	 	{
	 		name: 'OutboundMinutes',
	 		title: 'Outbound',
	   		group: 'feature-a',
	 		numberDecimals: 0,
	 		numberPrefix: '',
	 		numberSuffix: ' min',
	   		sortable: true,
	  		sizable: true,
	  		formatter: 'number',
	  		magicValues: {
	   			999999: 'Unlimited|Be sure to check the fine print to determine if restrictions apply to this <i>Unlimited</i> value.'
	   		}
	 	},
	 	{
	 		name: 'VoiceMail',
	 		title: 'Voice Mail',
	   		group: 'feature-a',
	   		sortable: true,
	  		sizable: true,
	  		formatter: 'checked'
	 	},
	 	{
	 		name: 'CallForward',
	 		title: 'CallForward',
	   		group: 'feature-a',
	   		sortable: true,
	  		sizable: true,
	  		formatter: 'checked'
	 	},
	 	{
	 		name: 'CallTransfer',
	 		title: 'Call Transfer',
	   		group: 'feature-b',
	   		sortable: true,
	  		sizable: true,
	  		formatter: 'checked'
	 	},
	 	{
	 		name: 'CallerId',
	 		title: 'CallerID',
	   		group: 'feature-b',
	   		sortable: true,
	  		sizable: true,
	  		formatter: 'checked'
	 	},
	 	{
	 		name: 'CallerIdBlock',
	 		title: 'Caller ID Block',
	   		group: 'feature-b',
	   		sortable: true,
	  		sizable: true,
	  		formatter: 'checked'
	 	},
	 	{
	 		name: 'AnonymousCallBlock',
	 		title: 'Anonymous Call Block',
	   		group: 'feature-b',
	   		sortable: true,
	  		sizable: true,
	  		formatter: 'checked'
	 	},
	 	{
	 		name: 'DoNotDisturb',
	 		title: 'Do Not Disturb',
	   		group: 'feature-c',
	   		sortable: true,
	  		sizable: true,
	  		formatter: 'checked'
	 	},
	 	{
	 		name: 'ThreeWayCall',
	 		title: 'Three Way Call',
	   		group: 'feature-c',
	   		sortable: true,
	  		sizable: true,
	  		formatter: 'checked'
	 	},
	 	{
	 		name: 'CallWaiting',
	 		title: 'Call Waiting',
	   		group: 'feature-c',
	   		sortable: true,
	  		sizable: true,
	  		formatter: 'checked'
	 	},
	 	{
	 		name: 'CallWaitingCallerId',
	 		title: 'Call Waiting Caller ID',
	   		group: 'feature-c',
	   		sortable: true,
	  		sizable: true,
	  		formatter: 'checked'
	 	},
	 	{
	 		name: 'CallHold',
	 		title: 'Call Hold',
	   		group: 'feature-d',
	   		sortable: true,
	  		sizable: true,
	  		formatter: 'checked'
	 	},
	 	{
	 		name: 'CallReturn',
	 		title: 'CallReturn',
	   		group: 'feature-d',
	   		sortable: true,
	  		sizable: true,
	  		formatter: 'checked'
	 	},
	 	{
	 		name: 'ContactList',
	 		title: 'Contact List',
	   		group: 'feature-d',
	   		sortable: true,
	  		sizable: true,
	  		formatter: 'checked'
	 	},
	 	{
	 		name: 'EmergencyCall',
	 		title: 'Emergency Call',
	   		group: 'feature-d',
	   		sortable: true,
	  		sizable: true,
	  		formatter: 'checked'
	 	},
	 	{
	 		name: 'SpeedDial',
	 		title: 'Speed Dial',
	   		group: 'feature-e',
	   		sortable: true,
	  		sizable: true,
	  		formatter: 'checked'
	 	},
	 	{
	 		name: 'RepeatDial',
	 		title: 'Repeat Dial',
	   		group: 'feature-e',
	   		sortable: true,
	  		sizable: true,
	  		formatter: 'checked'
	 	},
	 	{
	 		name: 'SoftPhone',
	 		title: 'Soft Phone',
	   		group: 'feature-e',
	   		sortable: true,
	  		sizable: true,
	  		formatter: 'checked'
	 	}
	];

	var filterColumnInputs = YAHOO.util.Selector.query('#filter-columns input');

	var filterInputs = [
	    {
	    	paramName: 'monthlyFee',
	    	input: YAHOO.util.Selector.query('#filter-monthly-fee')[0]
	    },
	    {
	    	paramName: 'contractMonths',
	    	input: YAHOO.util.Selector.query('#filter-contract-months input')
	    },
	    {
	    	paramName: 'setupFee',
	    	input: YAHOO.util.Selector.query('#filter-setup-fee')[0]
	    },
	    {
	    	paramName: 'freeTypeIds',
	    	input: YAHOO.util.Selector.query('#filter-free-type-id input')
	    },
	    {
	    	paramName: 'inboundMinutes',
	    	input: YAHOO.util.Selector.query('#filter-inbound-minutes')[0]
	    },
	    {
	    	paramName: 'outboundMinutes',
	    	input: YAHOO.util.Selector.query('#filter-outbound-minutes')[0]
	    },
	    {
	    	paramName: 'voiceMail',
	    	input: YAHOO.util.Selector.query('#filter-voice-mail')[0]
	    },
	    {
	    	paramName: 'callForward',
	    	input: YAHOO.util.Selector.query('#filter-call-forward')[0]
	    },
	    {
	    	paramName: 'callTransfer',
	    	input: YAHOO.util.Selector.query('#filter-call-transfer')[0]
	    },
	    {
	    	paramName: 'callerId',
	    	input: YAHOO.util.Selector.query('#filter-caller-id')[0]
	    },
	    {
	    	paramName: 'callerIdBlock',
	    	input: YAHOO.util.Selector.query('#filter-caller-id-block')[0]
	    },
	    {
	    	paramName: 'anonymousCallBlock',
	    	input: YAHOO.util.Selector.query('#filter-anonymous-call-block')[0]
	    },
	    {
	    	paramName: 'doNotDisturb',
	    	input: YAHOO.util.Selector.query('#filter-do-not-disturb')[0]
	    },
	    {
	    	paramName: 'threeWayCall',
	    	input: YAHOO.util.Selector.query('#filter-three-way-call')[0]
	    },
	    {
	    	paramName: 'callWaiting',
	    	input: YAHOO.util.Selector.query('#filter-call-waiting')[0]
	    },
	    {
	    	paramName: 'callWaitingCallerId',
	    	input: YAHOO.util.Selector.query('#filter-call-waiting-caller-id')[0]
	    },
	    {
	    	paramName: 'callHold',
	    	input: YAHOO.util.Selector.query('#filter-call-hold')[0]
	    },
	    {
	    	paramName: 'callReturn',
	    	input: YAHOO.util.Selector.query('#filter-call-return')[0]
	    },
	    {
	    	paramName: 'callWaitingCallerId',
	    	input: YAHOO.util.Selector.query('#filter-call-waiting-caller-id')[0]
	    },
	    {
	    	paramName: 'contactList',
	    	input: YAHOO.util.Selector.query('#filter-contact-list')[0]
	    },
	    {
	    	paramName: 'emergencyCall',
	    	input: YAHOO.util.Selector.query('#filter-emergency-call')[0]
	    },
	    {
	    	paramName: 'speedDial',
	    	input: YAHOO.util.Selector.query('#filter-repeat-dial')[0]
	    },
	    {
	    	paramName: 'repeatDial',
	    	input: YAHOO.util.Selector.query('#filter-repeat-dial')[0]
	    },
	    {
	    	paramName: 'softPhone',
	    	input: YAHOO.util.Selector.query('#filter-soft-phone')[0]
	    }
	];

	var dataTableOptions = YAHOO.lang.merge(options, {
		keyFieldName: 'VoipProductId',
		fields: fields,
		initialGroup: 'basic',
		filterInputs: filterInputs,
		defaultSort: {key:'MonthlyFee', dir: YAHOO.widget.DataTable.CLASS_ASC},
		customFormatters: {
			monthlyFee: function(elLiner, oRecord, oColumn, oData) {
	    		var monthlyFee = oRecord.getData('MonthlyFee');
		    	var contractMonths = oRecord.getData('ContractMonths');

		    	var value = YAHOO.squarecompare.formatCurrency(monthlyFee, 2) + '&#47;mo (' + contractMonths + ')';
		    	elLiner.innerHTML = value;
				YAHOO.util.Dom.setStyle(elLiner, 'text-align', 'right');

		    	var toolTipText = YAHOO.squarecompare.formatCurrency(monthlyFee, 2) + ' per month with a ' + contractMonths + ' month commitment or prepayment';
				YAHOO.util.Dom.addClass(elLiner, 'info-icon');
				elLiner.setAttribute('title', toolTipText);
		    }
		},
		getDataStep: 'get-voip-plans'
	});
	var dataTable = YAHOO.squarecompare.DataTable(dataTableOptions);

	// Listen for column group changes
    for (var i=0; i<filterColumnInputs.length; i++) {
		YAHOO.util.Event.addListener(filterColumnInputs[i], 'click', function(e) {
			dataTable.showColumnGroup(this.value);
		});
    }
};
