/**
 * OctopusLink Class
 * 
 * [Search Link Method]
 * 	OctopusLink.search();
 * 	OctopusLink.s();
 * 	ol.s();
 * 
 * 
 * [Destination Link Method]
 * 	OctopusLink.destination();
 * 	OctopusLink.d();
 * 	ol.d();
 * 
 * 
 * [Info Link Method]
 * 	OctopusLink.info();
 * 	OctopusLink.i();
 * 	ol.i();
 * 
 */


/**
 * Core Class
 */
function iOctopusLink()
{
	function _getHostName()
	{
		if(location.hostname){
			return location.hostname;
		}
		return 'www.octopustravel.co.jp';
	}
	function _getAffiliateKey()
	{
		if(!location.hostname){
			return 'sys';
		}
		if(location.pathname.match(/^\/([^/]+)\//)){
			return RegExp.$1;
		}
		return 'sys';
	}
	// connection setting
	this.connection = {
		scheme: 'http' ,
		host: _getHostName() ,
		affiliate_key: _getAffiliateKey()
	};
	
	// default setting
	this.default_param = {
		target: '_self' , // link target '_self' or '_blank'
		room_type: 'TB' , // twin bed room
		checkin: 30 , // 30 days after
		nights: 1 // 1 night
	};
};

/**
 * search() or s()
 * 
 * @param	item_code::string	default ''		item code
 * @param	city_code::string	mandatory		city code 
 * @param	room_type::string	default 'TB'	room type
 * @param	checkin::integer	default 90		checkin date (YYYY-MM-DD) or days to query date
 * @param	nights::integer		default 1		stay nights
 * @param	target::string		default '_self'	link target window
 * 
 * @return	false::bool
 */
iOctopusLink.prototype.search = function( item_code , city_code , room_type , checkin , nights , target )
{
	var url = this.surl( item_code , city_code , room_type , checkin , nights );
	
	if (!target) {target = this.default_param.target;}
	if(target == '_self'){
		document.location.href = url;
	}else{
		window.open(url,target);
	}
	return false;
};
iOctopusLink.prototype.s = iOctopusLink.prototype.search;

/**
 * echo search url
 */
iOctopusLink.prototype.echo_search = function( item_code , city_code , room_type , checkin , nights , target )
{
	var url = this.surl( item_code , city_code , room_type , checkin , nights );
	document.write(url);
	return false;
};
iOctopusLink.prototype.es = iOctopusLink.prototype.echo_search;

/**
 * search url
 * 
 */
iOctopusLink.prototype.surl = function( item_code , city_code , room_type , checkin , nights )
{
	if (!room_type) {room_type = this.default_param.room_type;}
	if (!checkin) {checkin = this.default_param.checkin;}
	if (!nights) {nights = this.default_param.nights;}
	
	var c = this.connection;
	var url = '';
	if(c.host == 'www.octopustravel.com'){
		url = c.scheme + '://' + c.host + '/jp/HotelLink?';
		url += 'siteid=' + c.affiliate_key;
		url += '&country=JP&language=ja&Currency=JPY';
		url += '&destination=C' + city_code;
		url += '&checkin=' + this.checkin(checkin);
		url += '&nights=' + nights;
		url += '&roomtype=' + room_type;
		url += '&hotelcode=' + item_code;
	}else{
		url = c.scheme + '://' + c.host + '/' + c.affiliate_key;
		url += '/hotel/search?city=' + city_code + '&item=' + item_code;
		url += '&roomtype=' + room_type;
		url += '&rooms=1';
		url += '&checkin=' + this.checkin(checkin);
		url += '&nights=' + nights;
	}
	
	return url;
};


/**
 * destination() or d()
 * 
 * @param	dest_code::string	mandatory		destination code
 * @param	room_type::string	default 'TB'	room type
 * @param	checkin::integer	default 90		checkin date (YYYY-MM-DD) or days to query date
 * @param	nights::integer		default 1		stay nights
 * @param	target::string		default '_self'	link target window
 * 
 * @return	false::bool
 */
iOctopusLink.prototype.destination = function( dest_code , room_type , checkin , nights , target )
{
	var url = this.durl( dest_code , room_type , checkin , nights );
	
	if (!target) {target = this.default_param.target;}
	if(target == '_self'){
		document.location.href = url;
	}else{
		window.open(url,target);
	}
	return false;
};
iOctopusLink.prototype.d = iOctopusLink.prototype.destination;

/**
 * echo destination url
 */
iOctopusLink.prototype.echo_destination = function( dest_code , room_type , checkin , nights , target )
{
	var url = this.durl( dest_code , room_type , checkin , nights , target );
	document.write(url);
	return false;
};
iOctopusLink.prototype.ed = iOctopusLink.prototype.echo_destination;

/**
 * destination url
 * 
 */
iOctopusLink.prototype.durl = function( dest_code , room_type , checkin , nights )
{
	if (!room_type) {room_type = this.default_param.room_type;}
	if (!checkin) {checkin = this.default_param.checkin;}
	if (!nights) {nights = this.default_param.nights;}
	
	var c = this.connection;
	var url = '';
	if(c.host == 'www.octopustravel.com'){
		url = c.scheme + '://' + c.host + '/jp/HotelLink?';
		url += 'siteid=' + c.affiliate_key;
		url += '&country=JP&language=ja&Currency=JPY';
		url += '&destination=' + dest_code;
		url += '&checkin=' + this.checkin(checkin);
		url += '&nights=' + nights;
		url += '&roomtype=' + room_type;
	}else{
		url = c.scheme + '://' + c.host + '/' + c.affiliate_key;
		url += '/hotel/search?dest=' + dest_code;
		url += '&roomtype=' + room_type;
		url += '&rooms=1';
		url += '&checkin=' + this.checkin(checkin);
		url += '&nights=' + nights;
	}
	
	return url;
};

/**
 * common checkin maker
 */
iOctopusLink.prototype.checkin = function (checkin)
{
	checkin = '' + checkin;
	if (checkin.match(/(\d{4})-(\d{1,2})-(\d{1,2})/))
	{
		return this.date_string(RegExp.$1 , RegExp.$2 , RegExp.$3);
	}
	var interval = checkin;
	if (!interval) {interval = 0}
	var d = new Date();
	d.setTime( d.getTime() + 86400000 * interval );
	return this.date_string( d.getYear() , d.getMonth() + 1 , d.getDate());
};
iOctopusLink.prototype.date_string = function (y,m,d)
{
	if (y<1900){y += 1900;}
	m = '' + m;
	m = m.replace(/^0+/,'');
	if (m<10){m = '' + '0' + parseInt(m);}
	d = '' + d;
	d = d.replace(/^0+/,'');
	if (d<10){d = '' + '0' + parseInt(d);}
	return '' + y + '-' + m + '-' + d;
};


/**
 * info() or i()
 * 
 * @param	item_code::string	default ''		item code
 * @param	city_code::string	mandatory		city code
 * @param	target::string		default '_self'	link target window
 * 
 * @return	false::bool
 */
iOctopusLink.prototype.info = function( item_code , city_code , target )
{
	var url = this.iurl(item_code , city_code);
	
	if (!target) {target = this.default_param.target;}
	if(target == '_self'){
		document.location.href = url;
	}else{
		window.open(url,target);
	}
	return false;
};
iOctopusLink.prototype.i = iOctopusLink.prototype.info;

/**
 * echo info url
 * 
 */
iOctopusLink.prototype.echo_info = function( item_code , city_code , target )
{
	var url = this.iurl(item_code,city_code);
	document.write(url);
	return false;
};
iOctopusLink.prototype.ei = iOctopusLink.prototype.echo_info;


/**
 * info url
 * 
 */
iOctopusLink.prototype.iurl = function( item_code , city_code )
{
	var c = this.connection;
	var url = '';
	if(c.host == 'www.octopustravel.com'){
		url = c.scheme + '://' + c.host + '/jp/Enter.jsp?';
		url += 'siteid=' + c.affiliate_key;
		url += '&start=HotelInfo.jsp';
		url += '&item=' + item_code;
		url += '&city=' + city_code;
		url += '&book=1&Currency=YEN&country=J';
	}else{
		url = c.scheme + '://' + c.host + '/' + c.affiliate_key;
		url += '/hotel/info?item=' + item_code + '&city=' + city_code;
	}
	return url;
};


/**
 * Global Instance
 */
OctopusLink = new iOctopusLink();
ol = OctopusLink;

