/**
 * app.js @ rtk.lt
 */

if (typeof($app) == 'undefined'){ var $app = {}; };

jQuery.extend($app, {
	debug: 				false,
	initialized:		false,
	i18n:{},
	ajax:	{
		timeout:		15000		
	},
	opts: {
		broadcasters: {},
		programmes: {},
		formValidation:	{
			formComplaints:{
				autoValidate: true,
				rules: {
					'data[complaints][name]':			{ required:true },
					'data[complaints][comments]':		{ required:true },
					'data[complaints][email]':			{ required:true, email:true },
					'data[complaints][phone]':			{ phoneLT:true },
					'data[complaints][fax]':			{ phoneLT:true },
					'data[complaints][postal_code]':	{ minlength:5 },
					'captcha':							{ required:true, remote:$app.base+'captcha.php5' }
				},
				messages:{}
			},
			formFaq:{
				autoValidate: true,
				rules: {
					'data[faq][name]':			{ required:true },
					'data[faq][question]':		{ required:true },
					'data[faq][email]':			{ email:true },
					'captcha':					{ required:true, remote:$app.base+'captcha.php5' }
				},
				messages:{},
				submitHandler: function(f){	$app.setup('formAjaxSubmitHandler',{ form:f,container:'faqAddContainer' }) }
			},
			'formActivitiesOfBroadcaster0': {
				autoValidate: false,
				rules: {
					'data[activitiesOfBroadcaster][broadcaster_title]':			{ required:true },
					'data[activitiesOfBroadcaster][broadcaster_code]':			{ digits:true, minlength:9 },
					'data[activitiesOfBroadcaster][broadcaster_address]':		{ required:true },
					'data[activitiesOfBroadcaster][broadcaster_phone]':			{ phoneLT:true },
					'data[activitiesOfBroadcaster][broadcaster_fax]':			{ phoneLT:true },
					'data[activitiesOfBroadcaster][broadcaster_email]':			{ email:true },
					'data[activitiesOfBroadcaster][broadcaster_website_url]':	{ url:true },
					'data[activitiesOfBroadcaster][broadcaster_ceo]':			{ required:true },
					'data[activitiesOfBroadcaster][participant_shares][]':		{ digits:true },
					'data[activitiesOfBroadcaster][participant_code][]':		{ digits:true, minlength:9 },
					'data[activitiesOfBroadcaster][filler_title]':				{ required:true }
				},
				messages:{},
				submitHandler: function(f){	$app.setup('formAjaxSubmitHandler',{ form:f,container:'formActivitiesOfBroadcasterContainer' }) }
			},
			'formActivitiesOfBroadcaster1': {
				autoValidate: false,
				rules: {
					'data[activitiesOfBroadcaster][broadcaster_total_income]':			{ required:true, digits:true },
					'data[activitiesOfBroadcaster][broadcaster_adv_income]':			{ required:true, digits:true },
					'data[activitiesOfBroadcaster][broadcaster_subscription_income]':	{ required:true, digits:true },
					'data[activitiesOfBroadcaster][broadcaster_other_income]':			{ required:true, digits:true }
				},
				messages:{},
				submitHandler: function(f){	$app.setup('formAjaxSubmitHandler',{ form:f,container:'formActivitiesOfBroadcasterContainer' }) }
			},
			'formActivitiesOfBroadcaster2': {
				autoValidate: false,
				rules: {
					'data[activitiesOfBroadcaster][broadcaster_network_population]':	{ required:true, digits:true },
					'data[activitiesOfBroadcaster][broadcaster_subscription_fee][]':	{ digits:true },
					'data[activitiesOfBroadcaster][broadcaster_subscibers_count][]':	{ digits:true },
					'data[activitiesOfBroadcaster][programme_broadcasting_time][]':		{ range:[0,24] }
				},
				messages:{},
				submitHandler: function(f){	$app.setup('formAjaxSubmitHandler',{ form:f,container:'formActivitiesOfBroadcasterContainer' }) }
			},
			'formActivitiesOfBroadcaster3': {
				autoValidate: false,
				rules: {
					'captcha':														{ required:true, remote:$app.base+'captcha.php5' },
					'agreement':													{ required:true }
				},
				messages:{},
				submitHandler: function(f){	$app.setup('formAjaxSubmitHandler',{ form:f,container:'formActivitiesOfBroadcasterContainer' }) }
			}
		}
	},
	initialize: function() {
		var args = arguments;
		if (typeof($app.base) != 'string')
			return false;

		if (!$app.initialized){
			jQuery.ajaxSetup($app.ajax);
			if(typeof($app.language) == 'string'){
				$app.loadScript($app.base + 'js/app.i18n/i18n-' + $app.language + '.js');
			}
			jQuery(document).ready(function(){
				jQuery.each(args,function(i,v){$app.setup(v);});
				jQuery.extend($app,{initialized:true});
			});
		}
		return true;
	},
	loadScript: function(filename){
        $app.log('loadScript: filename=' + filename);
		if(jQuery.browser.safari) {
			jQuery.ajax({url:filename,type:'GET',dataType:'script',async:false,cache:true});
		} else {
			if (jQuery.browser.msie) {
				document.write('<script charset="utf-8" type="text/javascript" src="'+filename+'"></'+'script>');
			} else {
				var h = document.getElementsByTagName('head')[0], s = document.createElement('script');
				s.setAttribute('type', 'text/javascript');
				s.setAttribute('language', 'javascript');
				s.setAttribute('src', filename);
				h.appendChild(s);
			}
		}
    },
	setup: function() {
		var $appSetupCallbacks = {

			formValidationSetup: function(){
				var formId = (arguments[0]||false);
				if($app.initialized == false){
					var _i18nMsgs = false;
					if(!jQuery.isEmptyObject($app.i18n) && (_i18nMsgs = jQuery.isPlainObject($app.i18n.formValidationDefaultMessages)))
							jQuery.extend(jQuery.validator.messages,$app.i18n.formValidationDefaultMessages);

					jQuery.validator.setDefaults({
						submitHandler: function(f) { f.submit(); }
					});

					jQuery.validator.addMethod('phoneLT', function(n, e) {
						return this.optional(e) || n.match(/^([\+\d\s\-,\(\)]{7,})/);
					}, (_i18nMsgs?$app.i18n.formValidationDefaultMessages.phoneLT:''));
				}

				jQuery.each($app.opts.formValidation,function(f,opts){
					if((!formId && opts.autoValidate!==true) || (formId && formId != f))
						return;
					var f = jQuery('#'+f);
					if(f.length && opts.rules){
						if(typeof(opts.rules.captcha) != 'undefined') {
							opts.messages.captcha = $app.i18n.formValidationDefaultMessages.captcha;
							var captchaImg = f.find('img.captcha');
							if(captchaImg.length){
								captchaImg.wrap($('<a class="captcha"></a>'));
								captchaImg.parent('a').click(function(){
									captchaImg = $(this).find('img.captcha').attr({'visibility':'hidden','height':captchaImg.height(),'width':captchaImg.width()}).width('0px');
									var i = $(new Image())
										.attr('src', function() { return captchaImg.attr('src')+'&amp;_='+((new Date()).getTime()); })
										.attr({'alt':captchaImg.attr('alt')})
										.addClass(captchaImg.attr('class')).one('load',function(){ captchaImg.hide(); });
									$(this).append(i);
								});
							}
						}
						f.validate(opts);
					}
				});
			},

			formMultiDynamicRowsSetup: function(){
				var opts = (arguments[0]||{});
				jQuery.extend({	formId: false, rowData: {}, disableControls: false},opts);

				if(!opts.formId)
					return false;
				var self = this, elF = $('#'+opts.formId);
				if(elF.length){
					elF.find('.field.field-multi-dynamic').each(function(){
						var elFld = $(this), tbTrLast = elFld.find('table tbody tr:last');
						if(tbTrLast.length && !elFld.data('rowHTML'))
						{
							elFld.data('rowHTML',('<tr>'+tbTrLast.html()+'</tr>')).data('rows',(tbTrLast.index()+1));
							tbTrLast.html(self._formMultiDynamicRowsFormatter(tbTrLast.index(),tbTrLast.html()));
						}


						elFld.bind('addData',function(){
							var data = arguments[1], cntRows = elFld.data('rows');
							jQuery.each(opts.rowData,function(){
								var elSelN = arguments[0], elData = arguments[1],
									elIn = elFld.find('table tbody tr:first').find('input,select,textarea').filter(function(){ return (this.name == elSelN+'[]'); });
									//$app.log(elSelN, elIn, elData);
								if(elIn.length && jQuery.isArray(elData) && elData.length){
									for(var i=-1; ++i<elData.length;)
									{
										if(cntRows<i+1)
											cntRows = elFld.trigger('addRow').data('rows');
										elIn = elFld.find('table tbody tr:eq('+i+') td:eq('+elIn.parent('td').index()+')')
											.find('input,select,textarea').filter(function(){ return (this.name == elSelN+'[]'); });
										if(!elIn.length)
											continue;
										if(elIn.is('input[type="checkbox"]'))
										{
											if(elData[i]==1)
												elIn.attr('checked','checked');
										}
										else
											elIn.val(elData[i]);
									}
								}
							});
						})
						.bind('addRow',function(){
							tbTrLast = elFld.find('table tbody tr:last');
							if(tbTrLast.length && tbTrLast.index() < 9){
								tbTrLast.after(self._formMultiDynamicRowsFormatter(tbTrLast.index()+1,$(this).data('rowHTML')));
								elFld.data('rows',(elFld.find('table tbody tr:last').index()+1));
							}
							return elFld;
						})
						.bind('remRow',function(){
							tbTrLast = elFld.find('table tbody tr:last')
							if(tbTrLast.index() > 0){
								tbTrLast.hide().remove();
								elFld.data('rows',(elFld.find('table tbody tr:last').index()));
							}
							return elFld;
						});

						if(!opts.disableControls)
						{
							elFld.find('.field-actions a.ctrl-add,.field-actions a.ctrl-rem').click(function(ev){
								ev.preventDefault();
								elFld.trigger(($(this).is('.ctrl-add')?'addRow':'remRow'));
								return false;
							});
						}
						else
							elFld.find('.field-actions .ctrl-addrem').hide().remove();


						if(opts.rowData && !jQuery.isEmptyObject(opts.rowData))
							elFld.trigger('addData',opts.rowData);
					});
				}

				return true;
			},
			_formMultiDynamicRowsFormatter: function() {
				var tbTrIndex = arguments[0], tbTrHTML = arguments[1];
				if(tbTrHTML.indexOf('}}') != -1)
					tbTrHTML = tbTrHTML.replace(/\{\{i\}\}/g,tbTrIndex+1);
				return tbTrHTML;
			},

			formAjaxSubmitHandlerSetup: function() {
				var opts = (arguments[0]||{});
				opts.form = ((typeof(opts.form) == 'string')?$('#'+opts.form):$(opts.form));
				opts.container = ((typeof(opts.container) == 'string')?$('#'+opts.container):$(opts.container));
				if(opts.form.length && opts.container.length){
					var ao = { url:opts.form.attr('action'), type:'post', cache:false, data:opts.form.serialize(), success:function(d){ opts.container.html(d) }},
						al = $('.ctrl-loader');
					if(al.length)
						opts.form.html($('<div>').append(al.clone().show()).html());
					jQuery.ajax(ao);
				}
			},

			listingFiltersSetup: function() {
				$('div.portlet-filter div.portlet-title').click(function(){
					$(this).parent('.portlet').find('div.portlet-content').toggle();
				});

				$('.ui-button.filter-trigger').hover(
					function(){ $(this).removeClass('ui-state-default').addClass('ui-state-focus'); },
					function(){ $(this).removeClass('ui-state-focus').addClass('ui-state-default'); }
				).toggle(function(){
					var handler = $(this), container = handler.next('div.filter-list');
					if(!container.hasClass('ui-dd-menu-container'))	{
						container.addClass('ui-dd-menu-container ui-widget ui-widget-content')
							.find('ul').addClass('ui-dd-menu ui-dd-menu-scroll').css({ height: '270px' })
							.find('a').click(function(ev){
								ev.preventDefault();
								handler.find('span.ui-button-text').text($(this).text());
								container.find('a').removeClass('ui-state-active');
								$(this).addClass('ui-state-active');
								handler.trigger('click');
								window.location.href = $(this).attr('href');
								return false;
							}).hover(
								function(){ container.find('a').removeClass('ui-state-hover'); $(this).addClass('ui-state-hover'); },
								function(){ $(this).removeClass('ui-state-hover'); }
							);
						container.css({
							left: 0
						}).show();

						$(document).click(function(){ handler.trigger('click'); });
					}
					else
						container.show();

				},function(){
					$('div.portlet-solutions-type-filter div.filter-list').hide();
				});

				return true;
			},

			inlineTriggersSetup: function(){
				var handlers = $('a.inline-trigger[rel]');

				if(handlers.length) {
					handlers.click(function(){
						var handler = $(this), container = $('#'+$(this).attr('rel'));
						if(handler.attr('href').replace(/#.*$/,'') != '' && container.length) {
							$.ajax({url: handler.attr('href'), type: 'GET',success:function(data){	container.html(data); }});
						}
						return false;
					});
				}
				return true;
			},

			langNavSetup:function(){
				$('#lang-nav li')
					.hover(
						function(){ $(this).animate({height:'46px'},{duration:25}); },
						function(){ $(this).animate({height:'24px'},{duration:25}); }
					).click(
						function(){ window.location.href = $(this).find('a').attr('href') }
					);
			},

			broadcastersSetup: function(){
				
				var defReq = String(window.location.hash).replace('#','').split('/'),
					defPostData = {},
					gridFirstLoad = true,
					gridColModelFormatOpts = {
						pathAlias:$app.opts.broadcasters.pathAlias,
						rowIndex:4
					},
					gridOpts = {
						url:$app.opts.broadcasters.queryUrl,
						datatype: 'json',						
						gridComplete: function(){ grid.find('tr.jqgrow:even').addClass('even');	},
						colNames:[$app.i18n.broadcasters.broadcasterTitle,$app.i18n.broadcasters.broadcasterType,$app.i18n.broadcasters.programmeType,$app.i18n.broadcasters.programmeTitle,''],
						colModel:[
							{name:'rb_title',index:'rb_title',search:true,formatter:this._gridLinkFormatter,formatoptions:gridColModelFormatOpts},
							{name:'rb_type',index:'rb_type',width:62,search:true,formatter:this._gridLinkFormatter,formatoptions:gridColModelFormatOpts},
							{name:'rb_broadcasting_type',index:'rb_broadcasting_type',width:170,formatter:this._gridLinkFormatter,formatoptions:gridColModelFormatOpts},
							{name:'rp_title',index:'rp_title',width:120,search:true,formatter:this._gridLinkFormatter,formatoptions:gridColModelFormatOpts},
							{name:'rb_alias',index:'rb_alias',hidden:true}
						],
						shrinkToFit:true,
						forceFit:true,
						rowNum:20,
						sortname: 'rb_title',
						viewrecords: true,
						sortorder: 'asc',
						pager: '#grid-listing-broadcasters-pager',
						autowidth: true,
						height: 'auto',
						hiddengrid: true
					}, 
					gridFilterOpts = {
						gridModel:false,
						gridToolbar:false,
						gridNames:false,
						filterModel: filterModelOpts = [
							{label:$app.i18n.broadcasters.filterBroadcasterType,name:'rb_type',stype:'select',defval:'',sopt:{value:$app.opts.broadcasters.filterOpts['rb_type']}},
							{label:$app.i18n.broadcasters.filterBroadcasterProgramme,name:'rp_id',stype:'select',defval:'',sopt:{value:$app.opts.broadcasters.filterOpts['rp_id']}},
							{label:$app.i18n.broadcasters.filterBroadcasterBroadcastingType,name:'rbt_id',stype:'select',defval:'',sopt:{value:$app.opts.broadcasters.filterOpts['rbt_id']}},
							{label:$app.i18n.broadcasters.filterBroadcasterCity,name:'rc_id',stype:'select',defval:'',sopt:{value:$app.opts.broadcasters.filterOpts['rc_id']}},
							{label:$app.i18n.broadcasters.filterBroadcaster,name:'rb_id',stype:'select',defval:'',sopt:{value:$app.opts.broadcasters.filterOpts['rb_id']}}
						],
						formtype:'horizontal',
						enableSearch: false,
						enableClear: false,
						autosearch: true								
					};
							

				var grid = $("#grid-listing-broadcasters").jqGrid(gridOpts);
				gridFilter = $('#grid-listing-broadcasters-filter').jqGrid('filterGrid','#grid-listing-broadcasters',gridFilterOpts);
				gridFilter.find('table.filtertable td').map(function(i){ if($(this).index() % 2) return $('<div class="filterform-cell cell-'+Math.floor(i/2)+'">').append($(this).prev().children()).append($(this).children()); }).appendTo(gridFilter.find('form.filterform'));				
				return true;
			},
			broadcasterSetup: function(){
				$('#tabs-broadcasting-programmes').tabs();
				return true;
			},

			programmesSetup: function(){
				var grid = $("#grid-listing-programmes").jqGrid({
					url:$app.opts.programmes.queryUrl,
					datatype: 'json',
					loadComplete:function(){ $('div.grid-listing div.ui-jqgrid tr.jqgrow:even').addClass('even'); },
					colNames:[$app.i18n.programmes.programmeTitle,$app.i18n.programmes.programmeType,$app.i18n.programmes.broadcasterTitle,''],
					colModel:[
						{name:'rp_title',index:'rp_title', width:145,formatter:this._gridLinkFormatter,formatoptions:{pathAlias:$app.opts.programmes.pathAlias,rowIndex:3}},
						{name:'rp_type',index:'rp_type',width:270,formatter:this._gridLinkFormatter,formatoptions:{pathAlias:$app.opts.programmes.pathAlias,rowIndex:3}},
						{name:'rb_title',index:'rb_title',formatter:this._gridLinkFormatter,formatoptions:{pathAlias:$app.opts.programmes.pathAlias,rowIndex:3}},
						{name:'rp_alias',index:'rp_alias',hidden:true}
					],
					shrinkToFit:true,
					forceFit:true,
					rowNum:20,
					sortname: 'rp_title',
					viewrecords: true,
					sortorder: 'asc',
					pager: '#grid-listing-programmes-pager',
					autowidth: true,
					height: 'auto'
				});
				var gridFilter = $('#grid-listing-programmes-filter').jqGrid('filterGrid','#grid-listing-programmes',{
					gridModel:false,
					gridToolbar:false,
					gridNames:false,
					filterModel: [
						{label:$app.i18n.programmes.filterProgramme,name:'rp_id',stype:'select',defval:'',sopt:{value:$app.opts.programmes.filterOpts['rp_id']}},
						{label:$app.i18n.programmes.filterProgrammeType,name:'rp_type',stype:'select',defval:'',sopt:{value:$app.opts.programmes.filterOpts['rp_type']}},
						{label:$app.i18n.programmes.filterProgrammeCity,name:'rc_id',stype:'select',defval:'',sopt:{value:$app.opts.programmes.filterOpts['rc_id']}},
						{label:$app.i18n.programmes.filterCoverage,name:'rp_coverage',stype:'select',defval:'',sopt:{value:$app.opts.programmes.filterOpts['rp_coverage']}}
					],
					formtype:'horizontal',
					enableSearch: false,
					enableClear: false,
					autosearch: true
				});

				gridFilter.find('table.filtertable td').map(function(i){ if($(this).index() % 2) return $('<div class="filterform-cell cell-'+Math.floor(i/2)+'">').append($(this).prev().children()).append($(this).children()); }).appendTo(gridFilter.find('form.filterform'));
				gridFilter.find('table.filtertable').remove();

				return true;
			},
			programmeFrequenciesSetup: function(){
				var grid = $("#grid-listing-programme-frequencies").jqGrid({
					url:$app.opts.programmes.queryUrl,
					datatype: 'json',
					loadComplete:function(){ $('div.grid-listing div.ui-jqgrid tr.jqgrow:even').addClass('even'); },
					colNames:[$app.i18n.programmes.freqsOperationalArea,$app.i18n.programmes.freqsFrequency],
					colModel:[
						{name:'operational_area',index:'operational_area',formatter:function(){ return '<span>'+arguments[0]+'</span>'; }},
						{name:'frequency',index:'frequency',formatter:function(){ return '<span>'+arguments[0]+'</span>'; }}
					],
					shrinkToFit:true,
					forceFit:true,
					rowNum:100,
					sortname: 'operational_area',
					viewrecords: true,
					sortorder: 'asc',					
					autowidth: true,
					height: 'auto'
				});
			},
			_gridLinkFormatter: function(v,opts,r){
				if(opts.colModel.formatoptions && opts.colModel.formatoptions.pathAlias && opts.colModel.formatoptions.rowIndex && r[opts.colModel.formatoptions.rowIndex])
					return '<a href="'+opts.colModel.formatoptions.pathAlias+'/'+r[opts.colModel.formatoptions.rowIndex]+'">'+(''!=v?v:'&nbsp;')+'</a>';
				else
					return v;
			},

			printSetup: function(){
				var handler, container, title;
				if((handler = $('.ctrl-content-toolbar a.ctrl-print')) && handler.length && (container = $('div.std')) && container.length){
					title = $('h1.content-title').clone();
					handler.click(function(){
						container = $('<div>').append(title).append(container.clone());
						container.find('.ctrl-content-toolbar,.nav-jump').remove();
						var w=window.open('about:blank','dummyPrintWindow','menubar=yes,location=no,resizable=yes,scrollbars=yes,status=no,width=680');
						w.document.open();
						w.document.write(([
							'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',
							'<html>',
							'<head><title>'+document.title+'</title>'+$('<div>').append($('style,link[type="text/css"]').clone()).html()+'</head>',
							'<body onload="window.focus();window.print();" class="page page-print">',
							(container.html().replace(/<!(?:--[\s\S]*?--\s*)?>\s*/g,'').replace(/<(iframe|script|noscript|object|embed)\b[^>]*>[\s\S]*?<\/\1>/ig,'')),
							'</body>',
							'</html>'
						]).join("\r\n"));
						w.document.close();
						return false;
					});
				}
			},
			googleSearchSetup: function(){
				var self = this, kw = arguments[0];
				if(!kw.length)
					return;
				google.load('search', '1', {language : $app.language});
				google.setOnLoadCallback(function() {
					google.search.Search.getBranding(document.getElementById('branding-google-search'));
					var cse = new google.search.CustomSearchControl('005130494290655207198:vxuidcpmkne');
					cse.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET);
					var opts = new google.search.DrawOptions();
					opts.setInput('searchInput');
					cse.draw('listing-google-search', opts);
					cse.execute(kw);
					cse.setSearchCompleteCallback(this,function(){
						var cr = arguments[1].cursor, ld;
						if(cr && cr.estimatedResultCount>0)
							ld = $app.i18n.googleSearch.listingResultsDetails.replace('{0}',cr.currentPageIndex+1).replace('{1}',cr.pages.length).replace('{2}',cr.estimatedResultCount);
						else
							ld = $app.i18n.googleSearch.listingResultsNone;
						$('.listing-toolbar-google-search').show().find('.listing-details').text(ld);
					});
					/*$('#portlet-search-form').bind('submit',function(ev){
						//customSearchControl.execute($('#searchInput').val());
						return false;
					});*/
				}, true);
			}
		};

		var callback = arguments[0]+'Setup';
		if (jQuery.isFunction($appSetupCallbacks[callback]))
			$app.log('setup: call=$app.'+callback+': ret='+$appSetupCallbacks[callback](arguments[1]||null));
	},
	log: function() {
		if (window['loadFirebugConsole'] && $app.debug && window.console && window.console.log && arguments.length) window.console.log.apply($app, arguments);
	}

});

$app.initialize('formValidation','langNav','listingFilters','print');
