/*
	Вставка блока на экспорт в нужный формат.
	По умолчанию экспорт в xls
*/
function linkexportto () {
	var $block = $('#sheet_export_to');
	if (!$block) {
		return;
	}
	$block.show();
	
	var $child_div = $block.find('div')[1];

	var imagestype = {
		'xls' : {src:'excel', txt:'Excel'},
		'csv' : {src:'csv', txt:'csv'}
	}
	var a = [];
	var ar = arguments;
	for (i=0;i<ar.length;i++) {
		var type = ((isset(ar[i]) && isset(imagestype[ar[i]])) ? ar[i] : 'xls' );
		var url = document.location.href;
	
		url = url.replace('.html', '.'+type);
		var anchor = '<img width="16" height="16" src="/images/'+imagestype[type]['src']+'.gif" alt="Экспорт в '+imagestype[type]['txt']+'" title="Экспорт в '+imagestype[type]['txt']+'">';
		a.push('<a href="'+url+'">'+anchor+'</a>');
		
	}
	$($child_div).html(a.join('&nbsp;&nbsp;&nbsp;'));
}

function LinesOnPage(cookie_path) {
    /* лимит ссылок на странице */
    $("select.lines_on_page").change(function(){
    	var value = $(this).val();
        if (value) {
            cookie_path = isset(cookie_path) ? cookie_path : '/';
            $.cookie("linksOnPage", value, { path: cookie_path, expires: 310 });
            redirectToFirst();
        }
    });
}

function redirectToFirst(url){
    url = isset(url) ? url : window.location.href;
    window.location.href = url.replace(/(\?|&)page=\d+/i, '');
}

function reloadWith(name, value) {
	var re = new RegExp("(&|\\?)"+name+'=[^&]*', "i");
	var tmp = document.location.href.replace(re, '');
	var qp = tmp.indexOf('?');
	
	tmp = tmp + (qp == -1 ? '?' : "&") + name + "=" + value;
	document.location.href = tmp;
}

function redirect(){
    if (isset(COUNT_PAGES_ON_LIST) && COUNT_PAGES_ON_LIST < 1) {
		document.location.href = PAGE ? document.location.href.replace("page="+PAGE, "page="+(PAGE-1)) : document.location.href;
    }
}

function isset() {
    // example 1: isset( undefined, true);        ->    returns 1: false
    // example 2: isset( 'Kevin van Zonneveld' ); ->    returns 2: true
    
    var a = arguments; 
	var l = a.length; 
	var i = 0;
    
    if (l == 0) { 
        throw new Error('Empty isset'); 
    }
    
    while (i != l) {
        if (typeof(a[i]) == 'undefined' || a[i] === null) { 
            return false; 
        } else { 
            i++; 
        }
    }
    return true;
}

function is_numeric(mixed_var) {
    return (typeof(mixed_var) === 'number' || typeof(mixed_var) === 'string') && mixed_var !== '' && !isNaN(mixed_var);
}

function h(str) {
	return str.toString().replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/&amp;#([0-9]{5});/g, '&#$1;');
}

function trim (str, charlist) {
    var whitespace, l = 0, i = 0;
    str += '';
    
    if (!charlist) {
        // default list
        whitespace = " \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000";
    } else {
        // preg_quote custom list
        charlist += '';
        whitespace = charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
    }
    
    l = str.length;
    for (i = 0; i < l; i++) {
        if (whitespace.indexOf(str.charAt(i)) === -1) {
            str = str.substring(i);
            break;
        }
    }
    
    l = str.length;
    for (i = l - 1; i >= 0; i--) {
        if (whitespace.indexOf(str.charAt(i)) === -1) {
            str = str.substring(0, i + 1);
            break;
        }
    }
    
    return whitespace.indexOf(str.charAt(0)) === -1 ? str : '';
}

function urlencode( str ) {
    var histogram = {}, tmp_arr = [];
    var ret = str.toString();
    
    var replacer = function(search, replace, str) {
        var tmp_arr = [];
        tmp_arr = str.split(search);
        return tmp_arr.join(replace);
    };
    
    // The histogram is identical to the one in urldecode.
    histogram["'"]   = '%27';
    histogram['(']   = '%28';
    histogram[')']   = '%29';
    histogram['*']   = '%2A';
    histogram['~']   = '%7E';
    histogram['!']   = '%21';
    histogram['%20'] = '+';
    
    // Begin with encodeURIComponent, which most resembles PHP's encoding functions
    ret = encodeURIComponent(ret);
    
    for (search in histogram) {
        replace = histogram[search];
        ret = replacer(search, replace, ret) // Custom replace. No regexing
    }
    
    // Uppercase for full PHP compatibility
    return ret.replace(/(\%([a-z0-9]{2}))/g, function(full, m1, m2) {
        return "%"+m2.toUpperCase();
    });
    return ret;
}

function urldecode(str) {
    var histogram = {};
    var ret = str.toString();
    
    var replacer = function(search, replace, str) {
        var tmp_arr = [];
        tmp_arr = str.split(search);
        return tmp_arr.join(replace);
    };
    
    // The histogram is identical to the one in urlencode.
    histogram["'"]   = '%27';
    histogram['(']   = '%28';
    histogram[')']   = '%29';
    histogram['*']   = '%2A';
    histogram['~']   = '%7E';
    histogram['!']   = '%21';
    histogram['%20'] = '+';
 
    for (replace in histogram) {
        search = histogram[replace]; // Switch order when decoding
        ret = replacer(search, replace, ret) // Custom replace. No regexing   
    }
    
    // End with decodeURIComponent, which most resembles PHP's encoding functions
    return decodeURIComponent(ret);
}

function retUnset(name, arr, def) {
	return isset(arr[name]) ? arr[name] : def;
}


var SETITLES = {
	'yandex_ru':'Яндекс',
	'yandex_ua':'Яндекс UA',
	'google_ru':'Google',
	'google_ua':'Google UA',
	'google_en':'Google ENG',
	'yahoo':'Yahoo',
	'rambler':'Рамблер',
	'mailru':'Mail.RU'
};


function check2index (url, se) {
	var params = {};
	params['engine'] = se;
	var page = url.replace('http://', '').replace('www.', '').replace(/\/$/, '');
	var query = '';
	switch (se) {
		case 'yandex_ru':
			query = 'url="'+page+'"|url="www.'+page+'"';
			break;
		case 'google_ru':
			query = 'info:www.'+page+' info:'+page+'';
		break;
		case 'yahoo':
			query = 'url:http://'+page+' OR url:http://www.'+page;
			break;
	}
	params['query'] = query;
	return link2search(params);
}

function link2search(params) {
    var se = retUnset('engine', params, 'yandex_ru');
    var query = (retUnset('query', params, ''));
    var page  = retUnset('page', params, 1);
    var numitems = retUnset('num', params, 10);
    var showposition = retUnset('position', params, 0);
    var redirect = retUnset('redirect', params, true);

	var url = '';

	if (se == 'rambler' && numitems < 15) {
		numitems = 15;
	}
	if (showposition) {
		page = Math.ceil(showposition/numitems);
	}
	switch(se) {
		case 'yandex_ru':
			url = 'http://www.yandex.ru/yandsearch?numdoc=' + numitems + '&p=' + (page  - 1) + '&text=' + urlencode(query) + '&lr=213';
			break;
		case 'yandex_ua':
			url = 'http://www.yandex.ua/yandsearch?numdoc=' + numitems + '&p=' + (page  - 1) + '&text=' + urlencode(query) + '&lr=187';
			break;
		case 'google_ru':
            url = 'http://www.google.ru/search?pws=0&hl=ru&lr=&aq=o&oq=&num=' + numitems + '&start=' + ((page - 1) * numitems) + '&q=' + urlencode(query);
			break;
		case 'google_en':
            url = 'http://www.google.com/search?pws=0&hl=en&lr=&aq=o&oq=&num=' + numitems + '&start=' + ((page - 1) * numitems) + '&q=' + urlencode(query);
			break;
		case 'google_ua':
            url = 'http://www.google.com.ua/search?pws=0&hl=uk&lr=&aq=o&oq=&num=' + numitems + '&start=' + ((page - 1) * numitems) + '&q=' + urlencode(query);
			break;
		case 'yahoo':
            url = 'http://search.yahoo.com/search?y=Search&ei=UTF-8&n=' + numitems + '&b=' + ((page-1) * numitems + 1) + '&p=' + urlencode(query);
			break;
		case 'rambler':
            url = 'http://nova.rambler.ru/search?oe=UTF-8&page='+page+'&pagelen=' + numitems + '&query=' + urlencode(query);
			break;
		case 'mailru':
            url = 'http://go.mail.ru/search?sf=' + ((page-1) * numitems)+'&num=' + numitems + '&q=' + urlencode(query);
			break;
		default:
			if (se.indexOf('yandex_') != -1) {
				var regid = se.replace('yandex_', '');
				if (regid) {
					url = 'http://www.yandex.ru/yandsearch?numdoc=' + numitems + '&p=' + (page  - 1) + '&text=' + urlencode(query) + '&lr='+regid;
				}
			}
			break;
	}

    if (redirect) {
        url = 'http://www.advip.biz/redir.php?url=' +  urlencode(url);
    }
	return url;
}


function link2linkindex(params) {
    var query = '';
    switch (params['engine']) {
        case 'yandex':
            var text = trim(params['text']);
			text = text.replace(/["|)(]/g, ' ');
            text = trim(text.replace(/(\s|^)(host|url)(\s|$)/ig, ' '));
            var url = trim(params['url']);
			url = url.replace(/(^http:\/\/|www\.)/ig, '');
            url = trim(url, '/');
            query = text + '<<(url:"' + url + '"|url:"www.'+ url +'")';
        break;
        case 'google':
        	query = "cache:"+params['url'];
        break;
        default:
        break;
    }

	params['query'] = query;
    return link2search(params);
}

function link2pageindex(params) {
    var query = '';
    switch (params['engine']) {
        case 'yandex':
            var url = trim(params['url']);
			url = url.replace(/(^http:\/\/|www\.)/ig, '');
            url = trim(url, '/');
            query = 'url:"' + url + '"|url:"www.'+ url + '"';
        break;
        case 'google':
        	query = "info:"+params['url'];
        break;
        default:
        break;
    }
	params['query'] = query;
    return link2search(params);
}


function bind_site_info() {
	// показ инф по сайту
	$(".site-info").click(function(){
		var $this = $(this);
		var site_id = this.id.split('_')[0];
		if (!is_numeric(site_id)) {
			site_id = site_id.substr(4);
		}
		var loc = location.href;
		var page_id = 0;
		if (loc.indexOf('second') > 0 || loc.indexOf('pages') > 0) {
			page_id = this.id.split('_')[1].substr(4);
		}
		$this.hide();
		$this.after('<img src="/images/loading.gif" />');

		var $view = $("#view-code");
		if ($view.size() == 0) {
			$('body').append('<script src="/js/jquery/jt.js"><\/script><div id="view-code" class="modal" style="display:none; padding:0 10px; overflow:auto; font-size:12px;"><div class="vc-content"></div></div>');
			$view = $("#view-code");
		}

		var $dia = $view.overlay({
			api: true,
			top:"40%",
			expose : {color:"transparent"}
		});

		var r = loc.split('?');
		r = r[0].replace(/(.*?)\.html(;.*?)?$/i, "$1.html;site_info");

		$.ajax({
			type: "POST",
			url: r,
			data: {"programm_id": PROGRAMM_ID, "site_id": site_id, "page_id": page_id},
			dataType:'json',
			success: function(msg) {
				$this.show();$this.next().remove();
				if (msg.error == 0) {
					var sitename = $this.parent().next().find('a.Url').text();
					if (sitename.indexOf('*') > 0) {
						msg.data.title = '***';
					}
					var s ="<h3 id=\"headsiteinfo\" style=\"font-family:Verdana;color:#200\">Информация о сайте \""+sitename+"\"</h3>";
					s += "<div id=\"infositediv\">";
					if (isset(sitename) && msg.data.title != '***') {
						var siteurl = sitename.replace('http://','');
						siteurl = siteurl.substr(0, (strpos(sitename, '/')>0?strpos(sitename, '/'):200));
						s += "<a href=\"/stat/"+siteurl+"\" target=\"_blank\">SEO-анализ этого сайта</a><br><br>";
					}
					s += "<b>Категория:</b> "+msg.data.category+"<br><br>";
					s += "<b>Тег \"title\":</b> "+msg.data.title+"<br><br>";
					s += "<b>Внешних ссылок:</b> "+msg.data.out_links+"<br><br>";
					s += "<b>Тиц / PageRank:</b> "+msg.data.cy_pr+"<br><br>";
					s += "<b>В индексе Яндекс:</b> "+(msg.data.yandex_index == 'f' ? 'проверяется' : (msg.data.yandex_index == 'n' ? 'нет' : 'да'))+"<br><br>";
					s += "<b>Уровень вложенности:</b> "+msg.data.level + "<br><br>";		
					s += "<b>Яндекс каталог:</b> "+(msg.data.yandex_yaca == 'f' ? 'проверяется' : (msg.data.yandex_yaca == 'n' ? 'нет' : 'да'))+"<br/><br/></div>";
				
					s += '<center id="infositea"><a href="javascript:;" class="red" onclick="$(\'#infositediv, #infositea\').hide(250);$(\'#headsiteinfo\').html(\'пожаловаться на сайт / страницу\');$(\'#abusediv\').show(200);">пожаловаться на сайт / страницу</a><br/><br/></center>';
				
					s += '<div id="abusediv" style="display:none;">'+
								'<input type="hidden" id="abuse_site_id" value="' + site_id + '"/>' +
								'<input type="hidden" id="abuse_page_id" value="' + page_id + '"/>' +
								'<ul type="none">'+
									'<li><input type="radio" class="abuse_type" id="abuse_type_1" name="abuse_type" value="1" checked /><label for="abuse_type_1">ссылка есть на странице, но скрыта<label></li>'+
									'<li><input type="radio" class="abuse_type" id="abuse_type_2" name="abuse_type" value="2"/><label for="abuse_type_2">ссылка отсутствует на странице<label></li>'+
								'</ul>'+
								'<div style="padding:7px 0 0 23px;"><div style="padding-bottom:3px;">Ваш комментарий (необязательно):</div><div>'+
							    '<textarea id="abuse_text" name="abuse_text" style="width:280px;height:60px;"></textarea>'+
							    '</div><div style="padding-top:10px;"><input type="button" id="abuse_button" value="Отправить"/></div></div>'+
							'<div>';
					s += '<br/>';
					$view.find('.vc-content').html(s);
					$dia.load();
				
					$('#abuse_button').click(function (){
						var $site_id = $('#abuse_site_id').val();
						var $page_id = $('#abuse_page_id').val();
						var $abuse_type = $('.abuse_type:checked').val();
						var $abuse_text = $('#abuse_text').val();
						$.post("/optimizator/links/zjs_index.html;abusetosite", {
							'site_id': $site_id, 
							'page_id': $page_id,
							'programm_id': PROGRAMM_ID, 
							'type': $abuse_type, 
							'text': $abuse_text
							}, null, 'json');
						
						$view.find('.close').trigger('click');
					});
				} else {
					alert("ERROR:\n" + msg.data);
				}
			},
			error: function(){
				$this.show();$this.next().remove();
				alert("Error type:\nConnect false");
			}
		});
	});
}	

function bind_out_links() {
/* показ внешних ссылок */
	$(".out_links").click(function(){
		var $this = $(this);
		var show_id = this.id;

		var site_id = show_id.indexOf('_') > 0 ? show_id.split('_')[1] : show_id;
		if (!is_numeric(site_id)) {
			site_id = site_id.substr(4);
		}
		var loc = location.href;
		if (loc.indexOf('second') > 0 || loc.indexOf('pages') > 0) {
			var page_id = this.id.split('_')[2];
		}

		$this.hide();
		$this.after('<img src="/images/loading.gif" />');

		var $view = $("#view-code");
		if ($view.size() == 0) {
			$('body').append('<script src="/js/jquery/jt.js"><\/script><div id="view-code" class="modal" style="display:none; padding:0 10px; overflow:auto; font-size:12px;"><div class="vc-content"></div></div>');
			$view = $("#view-code");
		}

		var $dia = $view.overlay({
			api:true,
			top: '40%',
			expose : { color: 'transparent' }
		});

		var r = loc.split('?');
		r = r[0].replace(/(.*?)\.html/i, '$1.html;show_out_links');
		/* получение списка */
		$.ajax({
		  type: "POST",
		  url: r,
		  data: {'programm_id': PROGRAMM_ID, 'site_id': site_id, 'page_url_crc': page_id},
          dataType:'json',
		  success: function(msg){
			 $this.show();$this.next().remove();
             if (msg.error == 0){
                 var s = "<h3>Просмотр исходящих ссылок для главной страницы сайта \""+$this.parent().parent().find('a.Url').text()+"\"</h3>"+
                            "<b>Последнее обновление:</b> "+ msg.data[0][0] +"<br>"+
                            "<b>Всего ссылок:</b> "+ msg.data[0][1] +"<br>";
				 if (msg.data[1].length > 0){
					s += '<ul>';
                    $(msg.data[1]).each(function(i){
						var txt = msg.data[1][i];
						if (txt.length > 50) {
							txt = txt.substr(0, 47) + '...';
						}
						
						s += "<li><a href=\"http://"+msg.data[1][i]+"\" target=\"_blank\">" + txt + "</a></li>";
					});
					s += "</ul>";
                 }
				$view.find('.vc-content').html(s);
				$dia.load();
              } else {
                  alert("ERROR:\n"+msg.data);
              }
  		  },
  		  error: function(){
			$this.show().next().remove();
  		  	alert("Error type:\nConnect false");
  		  }
		});
	});
}

function strpos (haystack, needle, offset) {
	var i = (haystack+'').indexOf(needle, (offset ? offset : 0));
	return (i === -1) ? false : i;
}

function formatCurrency(num) {
	num = num.toString().replace(/,/g, '.');
	if(isNaN(num)) 
		num = "0";
	var sign = (num == (num = Math.abs(num)));
	num = Math.floor(num * 100 + 0.50000000001);
	var cents = num % 100;
	num = Math.floor(num / 100).toString();
	if(cents < 10) 
		cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++) 
		num = num.substring(0,num.length-(4*i+3))+num.substring(num.length-(4*i+3));
	return ((sign ? '' : '-') + num + '.' + cents);
}
