/* ������ "������" ������ */
/* kirpichtion@gmail.com  */


window.onload = function() {
	
	document.onmouseup = function() { funcWorking = false; } 
	
	setSubmitForm();
	setPREvent();
	setMaxLinks();
	setSelectEvent();
	
}

var limit      = true;
var isModify   = false;
var modifyObj  = false;
var currentTIS = false;
var maxLinks   = 0;
var factorsTIS = [ 0.5, 1, 1.25, 1.5, 2 ];
var factorsPR  = [ 2, 100, 200, 400, 1000, 2000, 5000, 10000 ];

function setSelectEvent() {
	var section     = document.getElementById( 'sections' );
	var linksOnPage = document.getElementById( 'linksOnPage' );
	
	if ( linksOnPage.addEventListener ) {
		linksOnPage.addEventListener( 'change', updateSumm, false );
	} else {
		linksOnPage.attachEvent( 'onchange', updateSumm );
	}
	
	if ( section.addEventListener ) {
		section.addEventListener( 'change', updateSumm, false );
	} else {
		section.attachEvent( 'onchange', updateSumm );
	}
	
}

function setPREvent() {
	var table  = document.getElementById( 'prValues' );
	var fields = table.getElementsByTagName( 'INPUT' );
	
	for ( var i = 0; i < fields.length; i ++ ) {
		if ( fields[i].id.match( /pr[\d]/i ) ) {
			addEvent( fields[i] );
		}
	}
	
	return true;
}

function setMaxLinks() {
	var count   = document.getElementById( 'count' );
	var value   = parseInt( count.value );
	var current = maxLinks;
	
	if ( count.addEventListener ) {
		count.addEventListener( 'change', setMaxLinks, false );
	} else {
		count.attachEvent( 'onchange', setMaxLinks );
	}
	
	maxLinks = isNaN( value ) ? 0 : value;
	updatePR0( current );
}

function updatePR0( current ) {
	var pr0   = document.getElementById( 'pr0' );
	var value = isNaN( parseInt( pr0.value ) ) ? 0 : parseInt( pr0.value );
	
	pr0.value = value + ( maxLinks - current );
}

function getCurrentLinksCount() {
	var table  = document.getElementById( 'prValues' );
	var fields = table.getElementsByTagName( 'INPUT' );
	var total  = 0;
	
	for ( var i = 0; i < fields.length; i ++ ) {
		var value = parseInt( fields[i].value );
		total = total + ( isNaN( value ) ? 0 : value );
	}
	
	return total;
}

function addEvent( obj ) {
	var td    = obj.parentNode;
	var links = td.getElementsByTagName( 'INPUT' );
	
	links[0].onmousedown = function() {
			isModify  = true;
			modifyObj = links[0];
			modifyValue( 'minus', 0 );
	}
	
	links[0].onmouseup = function() {
			isModify = false
	}

	links[0].onmouseout = function() {
			isModify = false
	}

	links[2].onmousedown = function() {
			isModify  = true;
			modifyObj = links[2];
			modifyValue( 'plus', 0 );
	}
	
	links[2].onmouseup = function() {
			isModify = false
	}
	
	links[2].onmouseout = function() {
			isModify = false
	}
}

function modifyValue( act, step ) {
	if ( ! isModify ) return false;
	
	var parent = modifyObj.parentNode;
	var input  = parent.getElementsByTagName( 'INPUT' ).item(1);
	
	if ( input.value <= 0 && act == 'minus' ) { return false; }
	if ( ( getCurrentLinksCount() >= maxLinks && act == 'plus' )
		&& input.id == 'pr0' ) {
			return false;
		}
	if ( ( getCurrentLinksCount() >= maxLinks && act == 'plus' )
		&& input.id != 'pr0' ) {
			if ( parseInt( document.getElementById( 'pr0' ).value ) > 0 ) {
				pr0decrement();
			} else {
				return false;
			}
		}
	var value  = act == 'minus' ? -- input.value : ++ input.value ;
	
	updateSumm();
	blinkStop( 'blink' );
	setTimeout( 'modifyValue("' + act + '", "' + ++step + '");', 100 / ( step / 1 ) );
}

function pr0decrement() {
	var pr0   = document.getElementById( 'pr0' );
	var value = parseInt( pr0.value );
	
	pr0.value = value - 1;
}

function setSubmitForm() {
	document.getElementById( 'formCalculate' ).onsubmit = function() {
							blinkElement('blink');
							getTIS();
							document.getElementById( 'fallDown' ).style.display = 'block';
							document.getElementById( 'loader' ).style.visibility = 'visible';
							return false; };
}

function updateSumm() {
	var total       = 0;
	var linksOnPage = document.getElementById( 'linksOnPage' );
	var links       = linksOnPage.options[linksOnPage.selectedIndex].value;
	
	for ( var i = 0; i < 8; i ++ ) {
		total = total + getXapForPRItem( i );
	}
	
	insertSummary( total * links * 2 * 0.75 );
	return false;
}

function getXapForPRItem( item ) {
	var section       = document.getElementById( 'sections' );
	var sectionFactor = section.options[section.selectedIndex].value;
	var tisFactor     = getTISfactor( getTISvalue() );
	var prFactor      = factorsPR[ item ];
	var prValue       = parseInt( document.getElementById( 'pr' + item ).value );
	var countLinks    = isNaN( prValue ) ? 0 : prValue;
	var summary       = prFactor * countLinks * tisFactor * sectionFactor;
	
	return countLinks * prFactor * tisFactor * sectionFactor;
}

function getTISvalue() {
	var tis = document.getElementById( 'tis' ).value;
	return parseInt( tis );
}

function getTISfactor( count ) {
	var arr  = new Array( 0, 500, 5000, 50000, 250000, 10000000000000000 );
	var prev = false;
	
	for ( var i = 0; i < arr.length; i ++ ) {
		if ( count > prev && count < arr[i] ) {
			return factorsTIS[ i - 1 ];
		}
	}
	
	return false;
}

function getTIS() {
	var obj = document.getElementById( 'url' );
	var url = obj.value;
	
	if ( ! limit ) {
		alert( '����� �������� � ������� ��������' );
		return false;
	}
	
	return httpRequest( 'get_info.php', 'POST', 'q=' + url, insertInfo );
}

function httpRequest( url, method, params, func ) {
	var msxmlhttp = new Array(
		'Msxml2.XMLHTTP.5.0',
		'Msxml2.XMLHTTP.4.0',
		'Msxml2.XMLHTTP.3.0',
		'Msxml2.XMLHTTP',
		'Microsoft.XMLHTTP');
	
	if ( window.XMLHttpRequest ) {
		request = new XMLHttpRequest;
		if ( request.overrideMimeType ) {
			request.overrideMimeType( 'text/xml' );
		}
	} else if ( window.ActiveXObject ) {
		for ( var i = 0; i < msxmlhttp.length; i ++ ) {
			try {
				request = new ActiveXObject( msxmlhttp[i] );
			} catch ( e ) {
				request = false;
			}
		}
	}
	
	if ( ! request ) {
		alert( 'Can\'t creare XMLHTTP instance :(' );
		return false;
	}
	
	request.onreadystatechange = function() {
		if ( request.readyState == 4 ) {
			if ( request.status == 200 ) {
				func( request );
				document.getElementById( 'loader' ).style.visibility = 'hidden';
			} else {
				alert( 'There was a problem with the request :(' );
			}
		}
	}
	request.open( method, url, true );
	request.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
	request.send( params );
}

function insertInfo( request ) {

	var response = request.responseText.split(' | ');
	currentTIS = parseInt( response[0] );
	maxLinks   = parseInt( response[1] );
	
	if ( isNaN( currentTIS ) ) {
		limit = false;
	} else {
		document.getElementById( 'tis' ).value   = currentTIS;
		document.getElementById( 'count' ).value = maxLinks;
				if(document.getElementById( 'count' ).value=='0') 
{
//document.getElementById( blink ).innerHTML = value + '���������� url ��� www ';
}

		document.getElementById( 'pr0' ).value   = maxLinks;
	}
	
	updateSumm();
}

function insertSummary( value ) {
///////////////alert(value);
	document.getElementById( 'summary' ).innerHTML = Math.round(value) + ' ( $' + Math.round(value*100 / 2000)/100 + ' a month )';
}

function blinkStart(id) {
	var element = document.getElementById(id);
	var red     = '#CC0000';
	var black   = '#000000';
	
	element.style.display = 'block';
	if (element.getAttribute('lcolor') != black) {
		element.style.color = black;
		element.setAttribute('lcolor', black);
	} else {
		element.style.color = black
		element.setAttribute('lcolor', red);
	}
}

function blinkStop(id) {
	//document.getElementById(id).style.display = 'none';
	
	clearInterval(interval);
}

function blinkElement(id) {
	interval = setInterval("blinkStart('" + id + "')", 500);
}