    

$(document).ready( function(){

    /**
     * TABS
     */
	$(".ui-tabs").tabs();

    
    /**
    * COMPANY DETAILS PAGE
    *
    * more docs
    *
    */
    $('a.company-get-docs').live('click', function(){
        var href = $(this).attr('href');
        loadingDocument(href,1);
        return false;
    });
    
    
    
    /**
     * Datagrid: adding fragment for tabs
     */
    $('.my-monitors.ui-tabs div.panes').each(function() {
        fragment = '#' + $(this).attr('id');
        $('a', $(this)).each(function() {
            var href = $(this).attr('href') + fragment;
            $(this).attr('href', href);
        });
    });


    
    /**
     * COMPANY DETAILS PAGE
     *
     * company map
     */
    $('div.company-map').each(function(){
        address = $(this).attr('title');
        $this = $(this);
        $(this).googlemap({
            controls: true,
            labels: true,
            zoom: 15,
            cache: false,
            addresses: address,
            errorCallback: function (msg) {
                //$el = $('<div class="flash error" style="margin-bottom: 0;">' + msg + '</div>');
                //$this.before($el);
                //$this.before($el);
                //$this.remove();
            }
        });
    });


    
    

    /**
     * COMPANY REPORTS PAGE
     *
     * company reports explanations
     *
     */
    if ($('#accDetBorder').length > 0) {
        var compEx = new CompanyExplanation();
        compEx.init('a.tooltip');
    }

    // --- trigger first load ---
    //ajaxInterval = setInterval(function() {
        //clearInterval(ajaxInterval);
        //$('a.more').trigger('click');
    //}, 100);
    
    
    /**
     * HOME PAGE, SEARCH PAGE, DASHBOARD PAGE , COMPANY REPORTS PAGE
     *
     * tabs init
     *
     */
    $('#tabs').tabs();
    $('ul.tabs-nav-ul-show').show();

    
    $('input.text').setDefaultValue({css : 'textbox-default'});

     /**
     * Jquery Transfrom
     *
     * transform all form elements 
     * js <object>
     */
    var jq = $('.nice-form form').jqTransform({imgPath:'/www/imgs/'});
 
    var cardType = getSelectedOption($('#cardType'));
    
    if(cardType == 'MAESTRO' || cardType == 'SOLO'){
       $('#issueNumber').parents('tr').show();
       $('select[name^="validFrom"]').parents('tr').show();
       
    }else{
        $('#issueNumber').parents('tr').hide();
        $('select[name^="validFrom"]').parents('tr').hide();
    }
    
    if(getSelectedOption($('#country')) == 'US'){
       $('#billingState').parents('tr').show();
       
    }else{
        $('#billingState').parents('tr').hide();
    }
  
    /**
     * Jquery Transfrom - PAYMENT PAGE
     *
     * transform billingState select 
     *
     */
    $('#country').change( function() {
        var context = $(this).parent();
        var element = $('ul li a.selected', context);
        $(element)
        var index = $(element).attr('index');
        var option = $(this).find('option').get(index);
        $(option).attr('selected', 'selected');
        var optionValue = $(this).find('option').get(index).value;
        if (optionValue == 'US') {
          $('#billingState').parents('tr').show();
          $('#billingState', jq).jqTransSelect();
        } else{
          $('#billingState').parents('tr').hide();
        }      
    }); 
    
    /**
     * Jquery Transfrom - PAYMENT PAGE
     *
     * transform cardType select 
     *
     */
    $('#cardType').change( function(e) {
        var context = $(this).parent();
        var element = $('ul li a.selected', context);
        var index = $(element).attr('index');
        var option = $(this).find('option').get(index);
        $(option).attr('selected', 'selected');
        var optionValue = $(this).find('option').get(index).value;    
        if (optionValue == 'MAESTRO' || optionValue == 'SOLO') {
            $('#issueNumber').parents('tr').show();
            $('select[name^="validFrom"]').parents('tr').show();
        } else{
             $('#issueNumber').parents('tr').hide();
             $('select[name^="validFrom"]').parents('tr').hide();
        }
    }); 
    

    // if the function argument is given to overlay,
    // it is assumed to be the onBeforeLoad event listener
    if ($('#content').length > 0) {
        var compEx = new CompanyExplanation();
        compEx.init('a.mies1');
    }
    
    
    /**
     * Iframe Popup - Jquery tools overlay 
     *
     * load a page in to an iframe 
     * width=600, height=480
     */
    $(".popupUI").click(function(){
     var url = $(this).attr('href');
     $overlay = $('<div class="overlay"><iframe  src="' + url + '?popup=1' + '" frameborder="0" width="600" height="468"></iframe></div>');
     $('body').append($overlay);
         $($overlay).overlay({
            // effect: 'apple',
             load: true,
             mask: '#000'
         });
     return false;
    });
    
    /**
     * Iframe Popup - Jquery tools overlay 
     *
     * load a page in to an iframe - used for loading company reports
     * width=740, height=570
     */
     $("a.popupUIHome, a.newpopupUI, area.sample").click(function(){
     var url = $(this).attr('href');
     $overlay = $('<div class="home_overlay"><iframe id="overlay_iframe" src="' + url + '?popup=1' + '" frameborder="0" width="740" height="570"></iframe></div>');
     $('body').append($overlay);
     openOverlay($overlay);
     return false;
    });
    
    /**
     * Simple Popup Dialog - Jquery tools overlay 
     *
     * load a specific content
     */
    $(".simplepopup").click(function(){
       var text = $('#simplepopup').html();
       $overlay = $('<div class="overlay_simple">'+ text +'</div>');
       $('body').append($overlay);
       $($overlay).overlay({
            //effect: 'apple',
             load: true,
             mask: '#373737',
             top: '20%',
             close: $('.closepopup').click(function(){$overlay.overlay().close()})
         });
     return false;
    });
    
   
	

    /**
     * HOME PAGE 
     *
     * set cookie for advanced company search
     */
    $(".com-search-home").click(function(){
        setCookie('companiesAdvancedSearchHome',1,1);
    });


    /**
     * HOME PAGE 
     *
     * set cookie for advanced director search
     */
    $(".dir-search-home").click(function(){
        setCookie('directorAdvancedSearchHome',1,1);
    });
	
	/* support link */
	$(function(){
		$('li.ico-support a').click(function() {
			window.open('https://www.companiesmadesimple.com/support/visitor/index.php?/Default/LiveChat/Chat/Request/_sessionID=/_promptType=chat/_proactive=0/_filterDepartmentID=35/_randomNumber=sjc6hk8hv4hq0l0gi2tl8lsyjmxk9mju/_fullName=/_email=/', 'livechatwin', 'toolbar=0,location=0,directories=0,status=1,menubar=0,scrollbars=0,resizable=1,width=600,height=680');
			return false;
		});
	});
 
    $("#landingPagePopupOpener").overlay({
             effect: 'apple',
             left:"center",
             mask: '#000',
             oneInstance: false, 
             api : true
     });
	 
	//response request
    $("a.waitingForResponse").click(function(){
		var aElem = this;
		var waitForResponse = $(aElem).hasClass('queryResponse') ? false : true;
		var rel = $(this).attr('rel');
		var popupResponse = openPopup(rel);
		if (!waitForResponse) {
			produceDocument(aElem, popupResponse);
		}
		return waitForResponse;
	});
	
	(function($){
		var popupApi = {};
		if ($('#add-to-account-item-afer-login').length > 0) {
			popupApi = openPopup('#add-to-account-item-afer-login');
		}
        
        if ($('#add-to-basket-item-afer-login').length > 0) {
			popupApi = openPopup('#add-to-basket-item-afer-login');
		}
		
		/**
		 * Simple Popup Dialog - Jquery tools overlay 
		 *
		 * load a specific content
		 */
		$("a.renewExpiredMonitor").click(function(){
		   var url = $(this).attr('href');
		   var data = $('<div>').load(url + ' #popupEnvelope',function(){
		   var content = data.find('.renew-single-monitor').html();
			  var $overlay = $('<div class="overlay_simple">'+ content +'</div>');
			  $('body').append($overlay);
			  popupApi = openPopup($overlay); 
		   });
		 return false;
		});
		
		$('a.add-company-report, a.add-company-monitor, a.add-company-document, a.add-director-report, a.add-subscription').live('click', function(){
			var self = this;
			var url = $(this).attr('href');
			$.get(url, {}, function(response){
				if (response.error) {
					alert(response.errorMessage);
				} else {
					$('#add-to-basket-item').find('em').text($(self).attr('title'));
					//if its a button
					if ($(self).find('strong').length > 0) {
						$(self).replaceWith('<a class="fleft inbasketbtn" href="javascript:;"><strong>In Basket</strong></a>');
					} else {
						$(self).replaceWith('<span style="color: silver;">In Basket</span>');
					}
					popupApi = openPopupApi('#add-to-basket-item');
                                        refreshBasket();
				}
			}, 'json');
			return false;
		});
		
		$('a.renew-company-monitor').live('click', function(){
			var self = this;
			var url = $(this).attr('href');
			$.get(url, {}, function(response){
				if (response.error) {
					alert(response.errorMessage);
				}
				popupApi.close();
				refreshBasket();
			}, 'json');
			return false;
		});
		
		$('a.continue-shopping').click(function(){
			if (popupApi) {
				popupApi.close();
			}
			refreshBasket();
			return false;
		});
		
		//subscriptions
		$('a.company-report-subscription, a.company-monitor-subscription, a.company-document-subscription, a.director-report-subscription').live('click', function(){
			var textTitle = $(this).attr('title');
			$('#add-to-account-item').find('a.view-product-subscription,a.continue-shopping-subscription').attr('href', $(this).attr('href'));
			$('#add-to-account-item').find('em').text(textTitle)
			var buttonText = $(this).attr('rel');
			if (buttonText) {
				$('#add-to-account-item').find('strong.closePopup').text();
			}
			
			var linkType = getLinkType(this);
			if (linkType == 'report') {
				$('#add-to-account-item').find('a.view-product-subscription').addClass('reportLoader');
			}
			popupApi = openPopup('#add-to-account-item');
			return false;
		});
		
		$('a.view-product-subscription').click(function(){
			if ($(this).hasClass('reportLoader')) {
				popupApi.getOverlay().html($($(this).attr('rel')).html());
			}
            location.href = $(this).attr('href') + '&view=1';
			return false;
        }); 
		
		function getLinkType(elem) {
			if ($(elem).hasClass('director-report-subscription') || $(elem).hasClass('company-report-subscription')) {
				return 'report';
			}
			else if ($(elem).hasClass('company-document-subscription')) {
				return 'document';
			}
			return false;
		}

		var refreshBasket = function () {
			// --- refresh basket ---
			$.ajax({
				url: '/?ajaxGetSideBasket=1',
				type: "GET",
				dataType: "json",
				success: function(data) {
					if (data.error) {
						alert(data.errorMessage);
					} else {
						// --- overlay popup ---
						$('#basket-small').replaceWith(data.content);
						$('.menu-basket-small').html($('.side-basket-price').html());
						return false;
					}
				},
				error: function(XMLHttpRequest, textStatus, errorThrown) {
					alert('Oops...an error occurred (basket refresh error)');
				},
				timeout: function () {
					alert('Oops...an error occurred (basket refresh timeout)');
				}
			});
		}

	})(jQuery);
	 
});

// executes when complete page is fully loaded, including all images, iframes etc.,
$(window).load(function() {
    var href = $('div.company-get-docs').attr('title');
    if( ( typeof(href) !='undefined') && (href.length > 0) ){
        loadingDocument(href,null); 
    }
});

var loadingDocument = function(href, text){
    var $td = $('.company-get-docs').parent();
    var $tr = $td.parent();
    if(text){
        // --- change text ---
        $td.text('Loading documents. Please wait...');
    }
    $.ajax({
        url: href,
        type: "GET",
        dataType: "json",
        success: function(data) {              
            if (data.error) {
                $td.text(data.error);
            } else {
                $prev = $tr.prev();
                $tr.remove();
                $prev.after(data.content);
            }
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            $td.html('Oops...an error occurred');
        },
        timeout: function () {
            $td.html('Oops...an error occurred');
        }
    });
}



/**
 * PAYMENT PAGE
 *
 * get selected element 
 */
function getSelectedOption(elem) {
    var element = $('ul li a.selected', elem.parent()).attr('index');
    var option = elem.parent().find('option').get(element);
    $(option).attr('selected', 'selected');
    var optionValue = elem.find('option').get(element).value;
    return optionValue;
}
    


// parseUri 1.2.2
// (c) Steven Levithan <stevenlevithan.com>
// MIT License

function parseUri (str) {
	var	o   = parseUri.options,
		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
		uri = {},
		i   = 14;

	while (i--) uri[o.key[i]] = m[i] || "";

	uri[o.q.name] = {};
	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
		if ($1) uri[o.q.name][$1] = $2;
	});

	return uri;
};

parseUri.options = {
	strictMode: false,
	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
	q:   {
		name:   "queryKey",
		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
	},
	parser: {
		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
	}
};


var CompanyExplanation = function(){
    
    var self = this;
    var explainOverlay = '<div id="explain-overlay" class="overlay"><div class="ajax-content"><iframe id="explain-frame" width="100%" height="95%" name="explain-frame" /></div></div>';
    explainOverlay = $(explainOverlay).appendTo('body');
    var iframe = explainOverlay.find('[name="explain-frame"]');
    var loaded = false;
            
    this.openBox = function(){
        explainOverlay.overlay({
            //effect: 'apple',
            mask: '#000',
            load: true

        }).load();
 
    }
    
    this.emphasize = function(hash){
        //change background colour
        var className = 'reports-emphasize';
        var iframeBody = iframe.contents().find('body')
        iframeBody.find('div.' + className).removeClass(className);
        var divTag = iframeBody.find('a[name="' + hash + '"]').closest('div');
        if (divTag) {
            divTag.addClass(className);
            //scroll to element
            iframe.contents().scrollTop(divTag.position().top);
        }

    }
    
    this.handleException = function(error){
        //alert(error);
    }
    
    this.init = function(elem){

        $(elem).click( function() {
            try {
                var url = $(this).attr('href');
                var hash = parseUri(url).anchor;
                if (!loaded) {
                    iframe.attr('src', url);
                    iframe.one('load', function(){
                        self.openBox();
                        self.emphasize(hash);
                    });
                    loaded = true;
                } else {
                    self.openBox();
                    self.emphasize(hash);
                }

            } catch(error){
                self.handleException(error);
            }
            return false;

        });
    }
  
};
    

var RenewMonitor = function(){

    this.check = function(elem){
        var form = $(elem).closest('form').find('#monitor-companies');
        $(elem).bind('click', function(){
            $(form).find('[type="checkbox"]').attr('checked', 'checked');
        });
    }
    this.uncheck = function(elem){
        var form = $(elem).closest('form').find('#monitor-companies');
        $(elem).bind('click', function(){
            $(form).find('[type="checkbox"]').removeAttr('checked');
        })
    }
}


    /**
     * set a domain cookie
     */
    function setCookie(c_name,value,exdays,path)
    {
        var exdate=new Date();
        exdate.setDate(exdate.getDate() + exdays);
        var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
        var c_path=c_value + ((path==null) ? "/" : "; path=/"+path);
        document.cookie=c_name + "=" + c_value + c_path;
    }

    /**
     * get a domain cookie
     */
    function getCookie(c_name)
    {
    var i,x,y,ARRcookies=document.cookie.split(";");
    for (i=0;i<ARRcookies.length;i++)
      {
      x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
      y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
      x=x.replace(/^\s+|\s+$/g,"");
      if (x==c_name)
        {
        return unescape(y);
        }
      }
    }

    /**
     * delete a domain cookie
     */
    function deleteCookie( name, path, domain ) {
        if ( getCookie( name ) ) document.cookie = name + "=" +
        ( ( path ) ? ";path=" + path : "") +
        ( ( domain ) ? ";domain=" + domain : "" ) +
        ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
    }

 
var ReportTooltip = function(urlSrc, el) {
	var elems = el;
	var imageSrc = urlSrc;
	this.init = function() {
		$(elems).each(function() {
			var explanationElement = $(this).find('a.explanation');
			if (explanationElement.length > 0) {
				$(this).hover(function(){
					explanationElement.css('background-image', imageSrc);
				}, function(){
					explanationElement.css('background-image', 'none');
				})
			}
		});
	}
	
}

var closeOverlay = function(handleClose, closeButtons) {
	$(closeButtons).click(function(){
		if (typeof handleClose == 'function') {
			handleClose();
		}
	})
}

var openOverlay = function(elem) {
	$(elem).overlay({
             effect: 'apple',
             load: true,
             left:"center",
             mask: '#000',
             oneInstance: false, 
             api : true
     });
}

var openPopup = function(elem, onLoad) {
	if ($(elem).length) {
		return $(elem).overlay({
			left:"center",
			mask: '#000',
			oneInstance: false, 
			api : true,
			onLoad : onLoad || function(){}
		}).load();
	}
	return {};
}

var openPopupApi = function(elem) {
	if ($(elem).length) {
		return $(elem).overlay({
			left:"center",
			mask: '#000',
			oneInstance: false, 
			close: $('.closepopup').click(function(){$overlay.overlay().close()}),
                        api : true
		}).load();
	}
	return {};
}


function outputFlashMessage(message) {
	if ($('#content').length > 0) {
		$('#content').before('<div class="flash info">' + message + '</div>');
	}
}

var SearchBox = function() {
	var self = this;
	this.disable = function(elem) {
			elem.css({'background-position':'bottom left'});
			elem.attr('disabled', 'disabled');
	}
	
	this.enable = function(elem) {
		if (elem.attr('disabled')) {
			elem.css({'background-position':'top left'});
			elem.removeAttr('disabled');
		}
	}
	
	this.init = function(mainElem, triger, result) {
		var search = $(mainElem);
		if (search.length > 0) {
			var searchName = search.find(triger);
			var searchResult = search.find(result);
			if (searchName.val() == '') {
				this.disable(searchResult);
			}
			searchName.keyup(function(){
				if (searchName.val() != '') {
					self.enable(searchResult);
				}
				else {
					self.disable(searchResult);
				}

			})
		}
	}
}

 var produceDocument = function(elem, popupResponse) {
			$.ajax({
				url : $(elem).attr('href'),
				type : 'GET',
				data : {queryResponse : 1}, 
				success : function(data){
					if (data.hasOwnProperty('error')) {
						if (data.error) {
							alert(data.errorMessage);
						} else {
							window.location = $(elem).attr('href');
						}
						setTimeout(function(){
							popupResponse.close();
						}, 500);
						
					}
				},
				error : function(objAJAXRequest, strError, errorThrown){
					alert('Failed to retrieve file! Please contact our team by phone 0207 608 5516 or email theteam@companysearchesmadesimple.com')
					popupResponse.close();
				},
				dataType : 'json',
				timeout : 120000
			});
 }
