// globaalit asetusmuuttujat urleja yms. varten
var getgsmROOT = "http://www.gsmvertailu.fi/ebf/inc/puhelinvertailu/";
var _gsmformurl = getgsmROOT + "getgsmform.php?rqtype=1";
var _gsmresultsurl = getgsmROOT + "getgsmform.php?rqtype=2";
var _gsmhinnastourl = getgsmROOT + "getgsmform.php?rqtype=3";
var _gsmhelpurl = getgsmROOT + "getgsmform.php?rqtype=4";
var _gsmrefreshtopurl = getgsmROOT + "getgsmform.php?rqtype=5";

// tällä lukitaan eventtejä jos laskenta on käynnissä
var _lockevents = 0;

var _phoneidget = 0;

if($get('phoneid'))
{
	_formtype = 1;
	_phoneidget = $get('phoneid');
}

// kokoelma eventhandlereita, joihin viitataan jatkossa
var Site = {
	
	'laskuriformSubmit': function(e) 
	{	
		//  Prevent the submit event
	    new Event(e).stop();
	    if(_lockevents == 1 )
	   		return; // jos edellinen laskenta käynnissä niin ei jatketa eteenpäin...    
		
	    // laskenta käynnistyy, jonka ajaksi muut toiminnot lukkoon
	    _lockevents = 1; 
	    
	    var formdata = Post2Get('laskuriform'); 
	    $('gsmresults').empty().addClass('ajax-loading');
		
	    var callurl = "";	
	    if(_resultscount)
				callurl = _gsmresultsurl + '&callback=updateResultsDivComplete&resultscount=' + _resultscount + formdata;
	   	else
	   		callurl = _gsmresultsurl + '&callback=updateResultsDivComplete' + formdata;   	  	
	    
	   	aObj = new JSONscriptRequest(callurl);
	    aObj.buildScriptTag();
	    aObj.addScriptTag();
	    
	    formdata = null;
	    callurl = null;		
	},
	'phoneselect': function(e) 
	{			    
	   if(_lockevents == 1 )
	    	return; // jos laskenta käynnissä niin ei jatketa eteenpäin...    
	   $("gsmvert_phonedata").addClass('ajaxLoadingLarge');
	   submitTop( 'laskuriform' );
	},
	
	'updateGSMForm': function()
	{
		//$('gsmform').empty().addClass('ajax-loading');
  	   	var callurl = "";
	   	if(_formtype)
	   		callurl = _gsmformurl + '&callback=updateGSMFormComplete&formtype=' + _formtype;
	   	else
	   		callurl = _gsmformurl + '&callback=updateGSMFormComplete'   	
	   	
	   	aObj = new JSONscriptRequest(callurl);
	    aObj.buildScriptTag();
	    aObj.addScriptTag();
	    callurl = null;	
	}
};

// latautumisen jälkeen alustetaan peruslomake näkyviin
window.addEvent('domready', Site.updateGSMForm);


// kun lomake on haettu esiin niin tässä alustetaan event handlereita
function updateGSMFormComplete( gsmdata )
{
    // tulosten virkistys, laskurilomake lähetetään ajaxin välityksellä
	$('gsmform').removeClass('ajax-loading');
    $('gsmform').innerHTML = unescape(gsmdata);
    
	if(aObj)
		aObj.removeScriptTag();
  	
    aObj = null;
    gsmdata = null;
    Site.updateGSMForm = null; // tämä event voidaan vapauttaa tässä vaiheessa
    
    // asetetaan eventtien handlerit keskitetystä objectista
    $('laskuriform').addEvent('submit', Site.laskuriformSubmit);
    $('gsmvertaa').addEvent('click', Site.laskuriformSubmit);
    
    if($('gsmvertaa2'))
    	$('gsmvertaa2').addEvent('click', Site.laskuriformSubmit);

	if( $('phoneselect') )
		$('phoneselect').addEvent('change', Site.phoneselect);	   

    //alustetaan tooltipit
	var assuranceToolTips = new MooTips($$('.assuranceToolTip'), {
		evalAlways: true,			// always run the eval statement
		showOnClick: true,			// click image to show tooltip
		showOnMouseEnter: false,	// do not show on mouse enter
		className: 'assuranceToolTip'
	});	
	
	if(_phoneidget > 0)
	{
		$('phoneselect').value = _phoneidget;
		_phoneidget = 0;
		
		_phoneidget = -1;
		_lockevents = 1; 
	    
	    var formdata = Post2Get('laskuriform'); 
	    $('gsmresults').empty().addClass('ajax-loading');
		
		
	    var callurl = "";	
	    if(_resultscount)
				callurl = _gsmresultsurl + '&callback=updateResultsDivComplete&resultscount=' + _resultscount + formdata;
	   	else
	   		callurl = _gsmresultsurl + '&callback=updateResultsDivComplete' + formdata;   	  	
	    
		aObj = new JSONscriptRequest(callurl);
	    aObj.buildScriptTag();
	    aObj.addScriptTag();
	    
	    formdata = null;
	    callurl = null;
	}
	if(_phoneidget == -1)
	{
		_phoneidget = 0;
		_lockevents = 0;
		submitTop( 'laskuriform' );
	}
}

// päivittää tulosalueen containerin gsmdatalla
function updateResultsDivComplete( gsmdata )
{
	$('gsmresults').removeClass('ajax-loading');
    $('gsmresults').innerHTML = unescape(gsmdata);
    
	if(aObj)
		aObj.removeScriptTag();
      
    if(_lockevents == 1)
    	_lockevents = 0;
	
	aObj = null;
    gsmdata = null;
	
	if($('gsmvertaa'))
		$('gsmvertaa').addEvent('click', Site.laskuriformSubmit);
     
    if($('gsmvertaa2'))
    	$('gsmvertaa2').addEvent('click', Site.laskuriformSubmit);
    	
    //alustetaan tooltipit
	var assuranceToolTips2 = new MooTips($$('.assuranceToolTip2'), {
		evalAlways: true,			// always run the eval statement
		showOnClick: true,			// click image to show tooltip
		showOnMouseEnter: false,	// do not show on mouse enter
		className: 'assuranceToolTip'
	});
}


// päivittää parametrina tulavan containerin gsmdatalla
function updateTargetDivComplete( gsmdata, tcont )
{
	$(tcont).removeClass('ajax-loading');
    $(tcont).innerHTML = unescape(gsmdata);
    aObj.removeScriptTag();	
    
    if(_lockevents == 1)
    	_lockevents = 0;
			
    gsmdata = null;
    tcont = null;
    //aObj = null;	
    $('gsmvertaa').addEvent('click', Site.laskuriformSubmit);
    
    if($('gsmvertaa2'))
    	$('gsmvertaa2').addEvent('click', Site.laskuriformSubmit);
    
}


// päivittää laskurin yläosan containerin gsmdatalla
function updateTopDivComplete( gsmdata )
{
	$('gsmform').removeClass('ajax-loading');
    $('gsmform').innerHTML = unescape(gsmdata);
    aObj.removeScriptTag();
    
    if(_lockevents == 1)
  	  _lockevents = 0;
		
	aObj = null;
    gsmdata = null;			
}

// postataan parametrina saapuva lomake ja päivitetään laskuri container sen perusteella
function submitTop( sourceform )
{	
	if(_lockevents == 1 )
    	return; // jos laskenta käynnissä niin ei jatketa eteenpäin...    
	
	$('gsmresults').empty();
	var formdata = Post2Get(sourceform); 
	$('gsmform').addClass('ajax-loading');
	
	var callurl = _gsmrefreshtopurl + '&callback=updateGSMFormComplete' + formdata;  	
	
	aObj = new JSONscriptRequest(callurl);
	aObj.buildScriptTag();
	aObj.addScriptTag();
	formdata = null;
	callurl = null;
}

// postataan parametrina saapuva lomake ja päivitetään laskuri container sen perusteella
function toggleTopMode( topmode )
{	
	if(_lockevents == 1 )
    	return false; // jos laskenta käynnissä niin ei jatketa eteenpäin...    
		
	$('seltype').value = topmode;
		
	$('gsmresults').empty();
	var formdata = Post2Get('laskuriform'); 
	$('gsmvert_kytkyformright').addClass('ajaxLoadingLarge');
	var callurl = _gsmrefreshtopurl + '&callback=updateGSMFormComplete' + formdata;  	
	
	aObj = new JSONscriptRequest(callurl);
	aObj.buildScriptTag();
	aObj.addScriptTag();
	formdata = null;
	callurl = null;
}


// postataan parametrina saapuva lomake ja päivitetään tuloscontainer sen perusteella
function submitMe( sourceform, targetcontainer )
{	
	if(_lockevents == 1 )
    	return; // jos laskenta käynnissä niin ei jatketa eteenpäin...    
		
	var formdata = Post2Get(sourceform);
	var callurl = "";
	if(targetcontainer)
	{
		$(targetcontainer).addClass('ajax-loading'); // .empty()
		callurl = _gsmhinnastourl + '&callback=updateTargetDivComplete&tcont=' + targetcontainer + formdata;  
	}
	else
	{		
		$('gsmresults').empty().addClass('ajax-loading');
		callurl = _gsmhinnastourl + '&callback=updateResultsDivComplete' + formdata;  
	} 
	
	aObj = new JSONscriptRequest(callurl);
	aObj.buildScriptTag();
	aObj.addScriptTag();
	formdata = null;
	callurl = null;	
}


function openURL( urlpid, objID )
{
	if(_lockevents == 1 )
    	return; // jos laskenta käynnissä niin ei jatketa eteenpäin...    
			
	$('gsmresults').empty().addClass('ajax-loading');
   	targetURL = _gsmhelpurl + '&urlpid=' + urlpid + '&objid=' + objID + '&callback=updateResultsDivComplete';
	aObj = new JSONscriptRequest(targetURL);
    aObj.buildScriptTag();
    aObj.addScriptTag();
    targetURL = null;
}


// tämä funktio muuttaa sourceformin kentät get parametreilla kutsuttavaan muotoon.
function Post2Get(sourceform)
{
	var retUrl = "";
	
	$(sourceform).getFormElements().each(function(el){
		
		if( el.getValue() === false && ( el.name == 'E' || el.name == 'F' || el.name == 'S' ) )
		{
			retUrl = retUrl + '&' + el.name + '=' + '0';	
		}
		else  		
			retUrl = retUrl + '&' + el.name + '=' + el.getValue();		
	});	
		
	return retUrl;
}


function backtoResults()
{
	$('gsmvertaa').click();
}


// JSONscriptRequest -- a simple class for accessing Web Services
// using dynamically generated script tags and JSON
//
// Author: Jason Levitt
// Date: December 7th, 2005
//
// Constructor -- pass a REST request URL to the constructor
//
function JSONscriptRequest(fullUrl) {
    // REST request path
    this.fullUrl = fullUrl; 
    // Keep IE from caching requests
    this.noCacheIE = '&noCacheIE=' + (new Date()).getTime();
    // Get the DOM location to put the script tag
    this.headLoc = document.getElementsByTagName("head").item(0);
    // Generate a unique script tag id
    this.scriptId = 'YJscriptId' + JSONscriptRequest.scriptCounter++;
}

// Static script ID counter
JSONscriptRequest.scriptCounter = 1;

// buildScriptTag method
//
JSONscriptRequest.prototype.buildScriptTag = function () {

    // Create the script tag
    this.scriptObj = document.createElement("script");
    
    // Add script object attributes
    this.scriptObj.setAttribute("type", "text/javascript");
    this.scriptObj.setAttribute("src", this.fullUrl + this.noCacheIE);
    this.scriptObj.setAttribute("id", this.scriptId);
}
 
// removeScriptTag method
// 
JSONscriptRequest.prototype.removeScriptTag = function () {
    // Destroy the script tag
    
    
    $(this.scriptObj.id).remove();
    
    //vanha tapa
    //this.headLoc.removeChild(this.scriptObj);  
}

// addScriptTag method
//
JSONscriptRequest.prototype.addScriptTag = function () {
    // Create the script tag
    if(this.headLoc)
		this.headLoc.appendChild(this.scriptObj);
	else
	{
		document.getElementsByTagName("head").item(0);
	}
}


function $get(key,url){
if(arguments.length < 2) url =location.href;
if(arguments.length > 0 && key != ""){
if(key == "#"){
var regex = new RegExp("[#]([^$]*)");
} else if(key == "?"){
var regex = new RegExp("[?]([^#$]*)");
} else {
var regex = new RegExp("[?&]"+key+"=([^&#]*)");
}
var results = regex.exec(url);
return (results == null )? "" : results[1];
} else {
url = url.split("?");
var results = {};
if(url.length > 1){
url = url[1].split("#");
if(url.length > 1) results["hash"] = url[1];
url[0].split("&").each(function(item,index){
item = item.split("=");
results[item[0]] = item[1];
});
}
return results;
}
}
