function getRelativePath() {
	var p = window.location.pathname;
	var pos = 0;
	
	if(-1!=(pos=p.indexOf(websiteAccountDomain))) {
		pos += (websiteAccountDomain).length;
		p = p.substr(pos);
	}
	
	p = ('/'==p.charAt(0)?p.substr(1):p);
	if(-1!=p.indexOf('/')) {
		p = p.split('/');
		for(var i=0; i<p.length-1; i++)
		p[i] = "..";
		p[p.length-1] = "";
		p = p.join('/');
	} else
		p = "";
		
	return p;
}

function getAbsolutePath(relativePath) {
	if(0==relativePath.indexOf('http'))
		return relativePath;
	if(0==relativePath.indexOf('#'))
		return relativePath;
	//return websitePath + relativePath;
	return getRelativePath() + relativePath;
}

function getAbsoluteStaticPagesPath(relativePath) {
	if(0==relativePath.indexOf('http'))
		return relativePath;
	if(0==relativePath.indexOf('#'))
		return relativePath;
	//return websitePath + relativePath;
	return websitePath + relativePath;
}

function setSupportURL() {
	$$('.supporturl').each(function (el){
		if(0==el.get('href').indexOf(supportWebsiteURL))
			return;
		if(0==el.get('href').indexOf('http'))
			return;
		el.set('href', supportWebsiteURL + el.get('href'));
	});
}

function navigationHeader(id, active, name) {
	if(null==$(id))
		return;
	var nav_obj = { index: {ref: 'whatistringme.html', html: "What is TringMe?", 'class': "small item"},
		products: {ref: 'howitworks.html', html: 'How It Works?', 'class': "small item"},
		pricing: {ref: 'checkrates.html', html: 'How Much It Costs?', 'class': "small item" },
		developer: {ref: 'developers.html', html: 'For Developers', 'class': "small item" },
		support: {ref: supportWebsiteURL, html: 'Support', 'class': "small item"},
		press: {ref: 'press.html', html: 'Press', 'class': "small item" },
		about: {ref: 'company.html', html: 'About Us', 'class': "last small item" }
	};

	var logo = new Element('a', {href: getAbsoluteStaticPagesPath("index.html"), id: "logo", 'class': "ir", text: "TringMe"});
	logo.inject($(id));

	/*var tagLine = new Element('div', { id: "tagline", 'class': "ir", text: "Next Generation Communication Platform"});*/
	var tagLine = new Element('div', { id: "tagline", 'class': "ir", text: " "});
	tagLine.inject($(id));

	var userAuth = new Element('div', { id: "user_auth" });
	userAuth.inject($(id));
	var loginCookie = Cookie.read(loginCookieName);
	if(null!=loginCookie && ""!=loginCookie) {
		if(null!=name && ''!=name) {
			var nameElem = new Element('span', { 'text': "Hi " + name + '! '});
			nameElem.inject(userAuth);
		}
		if(-1==window.location.href.indexOf(websiteAccountPath)) {
			var viewCookie = Cookie.read(viewCookieName);
			var logInURL = websiteAccountPath + "myaccount" + (null!=viewCookie?viewCookie:'') + ".php";
			if(''!=websiteAccountPath)
				logInURL = getAbsolutePath(logInURL);
			var logInLink = new Element('a', { 'class': "small blue button login", href: logInURL});
			var logInText = new Element('span', { 'class': "login", text: "My Account"});
			logInText.inject(logInLink);
			logInLink.inject(userAuth);
		}
		var signUpURL = websiteAccountPath + "signout.php";
		if(''!=websiteAccountPath)
			signUpURL = getAbsolutePath(signUpURL);
		var signUpLink = new Element('a', { 'class': "small blue button", href: signUpURL});
		signUpLink.addEvent('click', function(evt) {
			evt.stop();
			if(window.store)
				store.remove('fetchedContacts');
			window.location = signUpURL;
		})
		var signUpText = new Element('span', { 'class': "sign_up", text: "Sign Out"});
		signUpText.inject(signUpLink);
		signUpLink.inject(userAuth);
	} else {
		var logInURL = websiteAccountPath + "login.php";
		if(''!=websiteAccountPath)
			logInURL = getAbsolutePath(logInURL);
		var logInLink = new Element('a', { 'class': "small blue button login", href: logInURL});
		var logInText = new Element('span', { 'class': "login", text: "Login"});
		logInText.inject(logInLink);
		logInLink.inject(userAuth);
		var signUpURL = websiteAccountPath + "signup.php";
		if(''!=websiteAccountPath)
			signUpURL = getAbsolutePath(signUpURL);
		var signUpLink = new Element('a', { 'class': "small blue button", href: signUpURL});
		var signUpText = new Element('span', { 'class': "sign_up", text: "Sign up"});
		signUpText.inject(signUpLink);
		signUpLink.inject(userAuth);
	}

	var navEl = new Element('div', { id: "nav"});
	for(i in nav_obj) {
		var elProp = nav_obj[i];
		elProp.href = getAbsoluteStaticPagesPath(elProp.ref);
		elProp.ref = null;
		elProp.id = i;
		var el = new Element('a', elProp);
		if(active==i)
			el.addClass('current');
		el.inject(navEl);
	}
	navEl.inject($(id));

	$$("input[type='button'].bluegradient, input[type='submit'].bluegradient, input[type='reset'].bluegradient").each(function(el) {
		el.addEvent('mousedown', animatePress);
		el.addEvent('mouseup', animatePress);
	});

	$$("input[type='button'].greengradient, input[type='submit'].greengradient, input[type='reset'].greengradient").each(function(el) {
		el.addEvent('mousedown', animatePress);
		el.addEvent('mouseup', animatePress);
	});
	setSupportURL();
}

function animatePress(evt) {
	if('mousedown'==evt.type.toLowerCase()) {
		if(!evt.rightClick)
			evt.target.addClass('pressed');
	} else if('mouseup'==evt.type.toLowerCase())
		evt.target.removeClass('pressed');
}

function footer(id) {
	if(null==$(id))
		return;
	var footerLinks = [{ref: "tringmetospp.html#pp", text: "Privacy&nbsp;Policy  | "},
		{ref: "tringmetospp.html#tos", text: "TOS | "},
		{ref: "company.html", text: "Company | "},
		{ref: "http://blog.tringme.com", text: "Blog | "},
		{ref: "resellers.html", text: "Become a Reseller | "},
		{ref: "contact.html", text: "Contact Us"}
	];
	var links = new Element('div', {id: "tringme_links"});
	links.inject($(id));
	var copyRight = new Element('div', {id: "tringme_copyright"});
	copyRight.inject($(id));
	var copyRightText = new Element('p', {html: "Copyright &copy; 2007-2011 TringMe. All rights reserved."});
	copyRightText.inject(copyRight);
	var poweredByText = new Element('a', {href: getAbsoluteStaticPagesPath("developers.html"), html: "Powered by: TringMe API"});
	poweredByText.inject(copyRight);

	var aEl = null;
	for(var i=0; i<footerLinks.length; i++) {
		aEl = new Element('a', {href: getAbsoluteStaticPagesPath(footerLinks[i].ref), html: footerLinks[i].text});
		aEl.inject(links);
	}
}

function sideNavigation(elId, active, nav_obj) {
	var ulEl = new Element('ul', {'class': "toplevel"});
	var liEl = null;
	var aEl = null;
	var spanEl = null;
	var imgEl = null;
	var childul = null;
	var childli = null;
	var selected = false;
	for(id in nav_obj) {
		selected = false;
		var prop = nav_obj[id];
		liEl = new Element('li', {'class': "toplevel"});
		aEl = new Element('a', {'class': "toplevel", href: getAbsolutePath(prop.ref)});
		imgEl = new Element('img', {'class': "icon", src: getAbsolutePath(prop.img), styles: prop.imgStyle});
		imgEl.inject(aEl);
		aEl.appendText(prop.text);
		aEl.addEvent('click', showHide);
		aEl.inject(liEl);

		if(null!=prop.child && ""!=prop.child) {
			childul = new Element('ul', {'class': "sublevel"});
			for(childid in prop.child) {
				childprop = prop.child[childid];
				childli = new Element('li', {'class': "sublevel"});
				aEl = new Element('a', {'class': "sublevel", href: getAbsolutePath(childprop.ref)});
				spanEl = new Element('span', {'class': "sublevel"});
				if(null!=childprop.img) {
					imgEl = new Element('img', {'class': "icon", src: getAbsolutePath(childprop.img), styles: childprop.imgStyle});
					imgEl.inject(spanEl);
				}
				spanEl.appendText(childprop.text);
				spanEl.inject(aEl);
				aEl.inject(childli);
				if(active==childid) {
					childli.addClass('selected');
					selected = true;
				}
				childli.inject(childul);
			}
			childul.inject(liEl);
			if(selected)
				childul.addClass('visible');
		} else if(active==id)
			selected = true;

		if(selected)
			liEl.addClass('selected');

		liEl.inject(ulEl);
		if(prop.drawBorder) {
			liEl = new Element('li', {'class': 'showborder'});
			liEl.inject(ulEl);
		}
	}
	ulEl.inject($(elId));
}

function showHide(evt) {
	var aEl = evt.target;
	if("A"!=aEl.get('tag').toUpperCase())
		aEl = aEl.getParent();
	if('#'==aEl.get('href'))
		evt.stop();
	else
		return true;
	var subUl = aEl.getNext();
	if(subUl.hasClass('visible')) {
		subUl.removeClass('visible');
		return;
	}
	liEls = aEl.getParent().getParent().getChildren('li');
	liEls.each(function (item){
		item.getLast().removeClass('visible');
	});
	subUl.addClass('visible');
}

function fixCodeHeight() {
	var cols = null;
	var rowH = 0;
	var i = 0;
	$$('.code>.paramrow').each(function(item){
		rowH = 0;
		cols = item.getChildren();
		for(i=0; i<cols.length; i++) {
			if(rowH < cols[i].scrollHeight)
				rowH = cols[i].scrollHeight;
		}
		item.setStyle('height', rowH);
	});
}

var selectedYOffset = 0;

function fixSideNav() {
	$(window).addEvent('scroll', function (evt) {
		var winH = 0;
		if(window.innerHeight)
			winH = window.innerHeight;
		else if(window.screen.availHeight)
			winH = window.screen.availHeight;

		var scrollY = 0;
		scrollY = $(window).getScroll().y;

		var posY = 0;
		var elId = "";

		// what the y position of the scroll is
		if (scrollY > selectedYOffset) {
			// if so, add the fixed class
			$$('#side_nav>ul.toplevel>li.selected')[0].addClass('fixed');
		} else {
			// otherwise remove it
			$$('#side_nav>ul.toplevel>li.selected')[0].removeClass('fixed');
		}

		$$('#dynamic-content>div>h3.apiheader').each( function(item) {
			if(posY>0)
				return;
			var t = item.getPosition().y;
			var th = item.getSize().y;
			if((t + th)>scrollY && (t + th)<=(scrollY + winH)) {
				if(null!=item.get('id') && ""!=item.get('id')) {
					posY = t;
					elId = item.get('id');
				}
			}
		});
		$$('#dynamic-content>div>h3.scrollto').each( function(item) {
			if(posY>0)
				return;
			var t = item.getPosition().y;
			var th = item.getSize().y;
			if((t + th)>scrollY && (t + th)<(scrollY + winH)) {
				if(null!=item.get('id') && ""!=item.get('id')) {
					posY = t;
					elId = item.get('id');
				}
			}
		});
		if(""==elId)
			return;

		var link = $$('#side_nav>ul.toplevel>li.selected>ul>li>a').filter('[href=#' + elId + ']');
		if(null==link)
			return false;
		if(null==link.length || 0==link.length)
			return false;

		if(link[0].getParent().hasClass('.selected'))
			return;

		$$('#side_nav>ul.toplevel>li.selected>ul>li').each( function(item) {
			item.removeClass('selected');
		});
		link[0].getParent().addClass('selected');
	});

	var scroll = new Fx.SmoothScroll({links: '#side_nav a[href*=#]',
		wheelStops: true,
		onScrolledTo: function(linkURL, el) {
			var link = $$('#side_nav>ul.toplevel>li.selected>ul>li>a').filter('[href=#' + el.get('id') + ']');
			if(null==link)
				return false;
			if(null==link.length || 0==link.length)
				return false;
			if(link[0].getParent().hasClass('.selected'))
				return;

			$$('#side_nav>ul.toplevel>li.selected>ul>li').each( function(item) {
				item.removeClass('selected');
			});
			link[0].getParent().addClass('selected');
		}
	});

	var selected = $$('#side_nav>ul.toplevel>li.selected');
	if(null!=selected) {
		if(null!=selected.length && selected.length>0)
			selectedYOffset = $$('#side_nav>ul.toplevel>li.selected')[0].offsetTop - parseFloat($$('#side_nav>ul.toplevel>li.selected')[0].getStyle('marginTop').replace(/auto/, 0));
	}
}

function repositionTextForImage() {
	$$('#dynamic-content>div.clearfix, #content.full>div.clearfix').each(function (el, index){
		var imgEl = el.getFirst('img');
		if(null==imgEl)
			return;
		if(imgEl.hasClass('ignore'))
			return;
		var childEl = el.getChildren();
		var h = 0;
		var sh = 0;
		for(var i=0; i<childEl.length; i++) {
			if(childEl[i] == imgEl)
				continue;
			h += childEl[i].offsetHeight;
			if(! isNaN(parseInt(childEl[i].getStyle('margin-top'))))
				h += parseInt(childEl[i].getStyle('margin-top'));
			if(! isNaN(parseInt(childEl[i].getStyle('margin-bottom'))))
				h += parseInt(childEl[i].getStyle('margin-bottom'));
			sh += childEl[i].scrollHeight;
		}
		var hEl = el.getFirst('h3');
		if(! isNaN(parseInt(hEl.getStyle('padding-top'))))
			h -= parseInt(hEl.getStyle('padding-top'));
		if(! isNaN(parseInt(hEl.getStyle('padding-bottom'))))
			h -= parseInt(hEl.getStyle('padding-bottom'));

		var pad = 0;
		if(h<imgEl.offsetHeight) {
			pad = parseInt((imgEl.offsetHeight - h) / 2);
			hEl.setStyle('padding-top', pad);
		} else {
			pad = parseInt((h - imgEl.offsetHeight) / 2);
			imgEl.setStyle('margin-top', pad);
			imgEl.setStyle('margin-bottom', pad);
		}
	});
}

function tringmelog(obj) {
	if(window.console && console.log)
		console.log(obj);
	else if(window.opera && opera.postError)
		opera.postError(obj);
}


function fireClickEvent(el) {
	var e = null;
	if (document.createEventObject) { 
		e = document.createEventObject();
		try {
			el.fireEvent('onclick', e);
			e = null;
		} catch (exp) { } 
	} else {
		e = document.createEvent('MouseEvents');
		try {
			//e.initMouseEvent('click', true, true);
			e.initMouseEvent('click', // event type
							true, // can bubble
							true, // cancelable
							window, // abstract view
							0, // detail
							0, // screenX
							0, // screenY
							0, // clientX
							0, // clientY
							false, // ctrl key
							false, // alt key
							false, // shift key
							false, // meta key
							0, // button
							null); // related target

			el.dispatchEvent(e);
		} catch (exp) { } 
	}
	return e;
}

function createClickEvent() {
	var e = null;
	if (document.createEventObject) { 
		e = document.createEventObject();
	} else {
		e = document.createEvent('MouseEvents');
	}
	return e;
}

function fireFocusEvent(el) {
	var e = null;
	if (document.createEventObject) { 
		e = document.createEventObject();
		try {
			el.fireEvent('onfocus', e);
			e = null;
		} catch (exp) { } 
	} else {
		e = document.createEvent('HTMLEvents');
		if(null==e)
			e = document.createEvent('Event');
		try {
			e.initEvent('focus', true, true);
			el.dispatchEvent(e);
			e = null;
		} catch (exp) { } 
	}
	return e;
}

