//////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////
/***
	General Functions
***/

var General = {
	
	/**************************************************
	Elements
	**************************************************/
	$ : function(string)
	{
		string = string || null;
		var pointer = null;
		
		if (string === null)
			pointer = null;
		if (typeof(string) === 'string')
			pointer = document.getElementById(string);
		else if (typeof(string) === 'object')
			pointer = string;
			
		return pointer;
	},
	
	/**************************************************
	Browser info
	**************************************************/
	browser : '', 
	getBrowser : function()
	{
		////////////	defining browser	//////////////////////
		if (navigator.appVersion.indexOf("MSIE 6") !== -1)
			General.browser = "ie6";
		else if (navigator.appVersion.indexOf("MSIE 7") !== -1)
			General.browser = "ie7";
		else if (navigator.appVersion.indexOf("MSIE 8") !== -1)
			General.browser = "ie8";
		else if (navigator.appVersion.indexOf("Chrome") !== -1)
			General.browser = "chrome";
		else if (navigator.appVersion.indexOf("Safari") !== -1)
			General.browser = "safari";
		else if (navigator.userAgent.indexOf("Firefox/3") !== -1)
			General.browser = "ff3"; 
		else if (navigator.userAgent.indexOf("Firefox/2") !== -1)
			General.browser = "ff2"; 
		else if (navigator.userAgent.indexOf("Opera/") !== -1)
			General.browser = "opera"; 
		else 
			General.browser = navigator.userAgent; 	
	},
	
	/**************************************************
	returns the dir name of a photo (btq, cloth, face) 
	**************************************************/
	getDirName : function(key, dirdepth, dirlength)
	{
		dirdepth = dirdepth || 2;
		dirlength = dirlength || 2;
		
		var padLength = dirlength*dirdepth;
		key = key + '';
		
		//adding zeros if needed
		while (key.length < padLength)
		{
			key = "0" + key;	
		}
		
		var splitkey = key.split("");
		var revertsplit = splitkey.reverse();
		var revertkey = revertsplit.join("");
		
		var subdirs = new Array();
		for (var i=0; i<dirdepth;i++)
		{
			subdirs[i] = revertkey.substr(i*dirlength, dirlength)
		}
		var dirName = subdirs.join("/");

		return dirName;
	},
	
	/**************************************************
	resize the page to specific values
	**************************************************/
	resizeToInner : function(innerWidth, innerHeight)
	{
		innerWidth = innerWidth || null;
		innerHeight = innerHeight || null;
		
		var frameWidth,frameHeight;
		if (self.innerHeight) // all except Explorer
		{
			frameWidth = self.innerWidth;
			frameHeight = self.innerHeight;
		}
		else if (document.documentElement && document.documentElement.clientHeight) // Explorer 6 Strict Mode
		{
			frameWidth = document.documentElement.clientWidth;
			frameHeight = document.documentElement.clientHeight;
		}
		else if (document.body) // other Explorers
		{
			frameWidth = document.body.clientWidth;
			frameHeight = document.body.clientHeight;
		}
	
		innerWidth = ( innerWidth != null ? innerWidth : frameWidth );
		innerHeight = ( innerHeight!= null ? innerHeight : frameHeight );
	
		difWidth = 0 + innerWidth - frameWidth;
		difHeight = 0 + innerHeight - frameHeight;
	
		/*
		alert("frameWidth = " + frameWidth + "\n" + "frameHeight = " + frameHeight);
		alert("difWidth = " + difWidth + "\n" + "difHeight = " + difHeight);
		*/
	
		if (difWidth != 0 )
		{
			window.resizeBy(difWidth,0);
		}
		if (difHeight != 0)
		{
			window.resizeBy(0,difHeight);
		}
	
		// scroll down
		window.scrollBy(0,120);
	},
	
	
	/**************************************************
	Calculation page viewable size (as in screen resolution)
	**************************************************/
	screenX : 0,
	screenY : 0,
	
	calcScreenSize : function()
	{
		if (self.innerHeight) // all except Explorer
		{
			General.screenX = self.innerWidth;
			General.screenY = self.innerHeight;
		}
		else if (document.documentElement && document.documentElement.clientHeight) // Explorer 6 Strict Mode
		{
			General.screenX = document.documentElement.clientWidth;
			General.screenY = document.documentElement.clientHeight;
		}
		else if (document.body) // other Explorers
		{
			General.screenX = document.body.clientWidth;
			General.screenY = document.body.clientHeight;
		} 
	},
	
	/**************************************************
	Calculation page size
	**************************************************/
	pageX : 0,
	pageY : 0,
	
	calcPageSize : function()
	{
		var clientW = document.body.clientWidth;
		var clientH = document.body.clientHeight;
		
		var scrollW = document.body.scrollWidth;
		var scrollH = document.body.scrollHeight;
		
		///// saving Page width /////
		if (clientW > scrollW)
			General.pageX = clientW;
		else
			General.pageX = scrollW;
			
		///// saving Page Height /////
		if (clientH > scrollH)
			General.pageY = clientH;
		else
			General.pageY = scrollH;
	},
	
	/**************************************************
	Get Scroll Top + Left
	**************************************************/
	getScrollTop : function()
	{
		var scrollTop = 0;
		if (General.browser == 'ie7' || General.browser == 'ie6' || General.browser == 'ie8')
		{
			var scroll1 = document.body.scrollTop;
			var scroll2 = document.documentElement.scrollTop;
			scrollTop = scroll1 > scroll2 ? scroll1 : scroll2;
		}
		else
		{
			scrollTop =  window.pageYOffset;
		}
			
		return scrollTop;
	},
	
	getScrollLeft : function()
	{
		var scrollLeft = 0;
		if (General.browser == 'ie7' || General.browser == 'ie6' || General.browser == 'ie8')
		{
			var scroll1 = document.body.scrollLeft;
			var scroll2 = document.documentElement.scrollLeft;
			scrollLeft = scroll1 > scroll2 ? scroll1 : scroll2;
		}
		else
		{
			scrollLeft =  window.pageXOffset;
		}
			
		return scrollLeft;
	},
	
	/**************************************************
	Create bookmark
	**************************************************/
	createBookmark : function(_url, _title)
	{
		_url = _url || 'http://www.girlsense.com';
		_title = _title || 'GirlSense';

		// Mozilla Firefox Bookmark
		if (window.sidebar)
		{ 
			window.sidebar.addPanel(_title, _url,"");
		}
		// IE Favorite
		else if( window.external)
		{
			window.external.AddFavorite( _url, _title); 
		}
		// Opera Hotlist
		else if(window.opera && window.print)
		{ 
			return true;
		}
		
		return true;
	 },
	 
	 /**************************************************
	Create as Homepage
	**************************************************/
	setHompage : function(_url)
	{
		_url = _url || 'http://www.girlsense.com';

		try
		{
			if (General.browser === 'ie6' || General.browser === 'ie7' || General.browser === 'ie8')
			{
				event.srcElement.style.behavior='url(#default#homepage)';
				event.srcElement.setHomePage('http://www.girlsense.com');
			}
			else
			{
				netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
				var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components. interfaces.nsIPrefBranch);
	    		prefs.setCharPref('browser.startup.homepage','http://www.asp.net/130.aspx');
			}
		}
		catch(e)
		{
			alert('There was an error. Please set GirlSense.com as your home page manually');
		}
	 },
	 
	/**************************************************
	Random WWW (for fast loading)
	**************************************************/
	randomWWW : 0,
	setRandomWWW : function()
	{
		var randW = Math.floor(20*Math.random());
		if (randW == 0)
			General.randomWWW = '';
		else
			General.randomWWW = randW;
	},
	
	
	/**************************************************
	PIXEL statistics
	**************************************************/
	PixelStats :
	{
		send : function(_src)
		{
			if (_src == "http://clk.atdmt.com/AVE/go/136831296/direct;wi.;hi./01/")
				return;
			
			document.getElementById('pixelStatsImg').src = _src;	
		}
	},
	
	/**************************************************
	Get Flash Movie Object
	**************************************************/
	getFlashMovieObject : function(movieName)
	{
		if (navigator.appName.indexOf("Microsoft") != -1)
		{
			//alert('IE');
			return window.document[movieName];
		}
		else
		{
			if(window.document[movieName].length != undefined)
		  	{
				// alert('FF');
			 	return window.document[movieName][1];
			}
		  	else
		  	{
				//alert('dun know');
				return window.document[movieName];
			}
		}
	},
	
	/**************************************************
	Footer - abuse report
	**************************************************/
	Footer :
	{
		showAbuseReport : function()
		{
			var abuseObj = document.getElementById('abuseReport');
			var footerObj = document.getElementById('bottomBarDiv');
			
			if (abuseObj.style.display === 'block')
				return;
			
			General.calcPageSize();
			abuseObj.style.display = "block";
			var _w = abuseObj.offsetWidth;
			var _h = abuseObj.offsetHeight;
			var xpos = (parseInt(footerObj.offsetWidth) / 2) - (_w/2);
			var ypos = 0;
			var footerStyle = footerObj.style.position || '';
			if (footerStyle == 'absolute')
			{
				abuseObj.style.position = 'absolute';
				ypos = footerObj.offsetTop - (_h/2);
			}
			else
				ypos = 0- ( (footerObj.offsetHeight/2) + _h); 
			
			
			abuseObj.style.top = ypos + "px";
			abuseObj.style.left = xpos + "px";
			
		},
		
		hideAbuseReport : function()
		{
			document.getElementById('abuseReport').style.display = "none";
		},	
		
		ajax : null,
		
		sendAbuse : function()
		{
			var subjectField = window.document.forms['abuseForm'].data1.value.replace(/^\s+|\s+$/g, '');
			if (subjectField === '')
			{
				alert('What is the subject of your complaint?');
				return;	
			}
			
			var commentsField = window.document.forms['abuseForm'].comments.value.replace(/^\s+|\s+$/g, '');
			if ((commentsField.indexOf("<a") != -1) || (commentsField.indexOf("href") != -1) || (commentsField.indexOf("onclick") != -1))
			{
				alert('Please do not enter any links.');
				return;	
			}
			if (commentsField === '')
			{
				alert('Please write something..');
				return;	
			}
			
			var str = General.Footer.getFormElements('abuseForm');
			
			if (General.Footer.ajax === null)
			{
				General.Footer.ajax = new AJAX.request('http://www.girlsense.com/tools/feedback/index.pl', AJAX.Method.POST, AJAX.Type.ASYNC);	
				General.Footer.ajax.onFailFunction = General.Footer.abuseResponseFail;
				General.Footer.ajax.onTimeoutFunction = General.Footer.abuseResponseFail;
				General.Footer.ajax.onSuccessFunction = General.Footer.abuseResponseOK;
			}
			
			if (General.Footer.ajax !== null)
				General.Footer.ajax.start(str);	
			else
				alert('Error sending your abuse');	
		},
		
		abuseResponseOK : function(request)
		{
			if (request.responseText.indexOf('Thank you') != -1)
				General.Footer.hideAbuseReport();
			else
				alert("your report wasn't sent");
		},
		
		abuseResponseFail : function(request)
		{
			alert("There was en error sending your report.\nPlease try again.");
		},
		
		getFormElements : function (formName)
		{
			var elementsStr = ''
			var formElementsObj = document.forms[formName].elements;
			for (j=0;j<formElementsObj.length;j++)
			{
				if (elementsStr != '')
				{
					elementsStr = elementsStr + "&"+ formElementsObj[j].name ;
					elementsStr = elementsStr + "="+ formElementsObj[j].value;	
				}
				else
				{
					elementsStr = elementsStr + formElementsObj[j].name;
					elementsStr = elementsStr + "="+ formElementsObj[j].value;	
				}
			}	
			return elementsStr;
		}
	},
	
	/**************************************************
	Cookies
	**************************************************/
	Cookies :
	{
		_read : function(key)
		{
			// Get cookie string and separate into individual cookie phrases:
			var cookie_string = "" + document.cookie;
			var cookie_array = cookie_string.split ("; ");
		
			// Scan for desired cookie:
			for (var i = 0; i < cookie_array.length; ++ i)
			{
				var single_cookie = cookie_array[i].split ("=");
				if (single_cookie.length != 2)
					continue;
				var name  = unescape (single_cookie [0]);
				var value = unescape (single_cookie [1]);
		
				// Return cookie if found:
				if (key == name)
				{
					return value;
				}
			}
			
			// Cookie was not found:
			return null;
		},
		
		_write : function(name, value, path, perSession)
		{
			perSession = perSession === true ? true : false;
			
			// Build the expiration date string:
			var expiration_date = '';
			if (!perSession)
			{
				expiration_date = new Date();
				if (General.browser !== 'chrome')
					expiration_date.setYear (expiration_date.getFullYear () + 1);
				else
					expiration_date.setYear (expiration_date.getYear () + 1);
				expiration_date = expiration_date.toGMTString();
			}
			
			// Build the set-cookie string:
			var cookie_string = escape (name) + "=" + escape (value);
			
			// adding expiry date
			if (expiration_date !== '')
				cookie_string += "; expires=" + expiration_date;
				
			// adding a path
			if (path != null)
				cookie_string += "; path=" + path;
		
			// Create/update the cookie:
			document.cookie = cookie_string;
		}
		
	},
	
	
	/**************************************************
	Object Position
	**************************************************/
	ObjectPosition :
	{
		X : function(PdivId)
		{
			if (!PdivId)
				return -1;
			else if (typeof(PdivId) == 'string')
				divId = document.getElementById(PdivId);
			else if (typeof(PdivId) == 'object')
				divId = PdivId;
			else
				return -1;
			
			var counterX = divId.offsetLeft;
			counterX -= divId.scrollLeft;
			
			var divIdX = divId;
			while (divIdX.offsetParent)
			{
				counterX += divIdX.offsetParent.offsetLeft;
				if (divIdX != document.body)
					counterX -= divIdX.scrollLeft;
				
				divIdX = divIdX.offsetParent;
			}
			return counterX;	
		},
		
		
		Y : function(PdivId)
		{
			if (!PdivId)
				return -1;
			else if (typeof(PdivId) == 'string')
				divId = document.getElementById(PdivId);
			else if (typeof(PdivId) == 'object')
				divId = PdivId;
			else
				return -1;
			
			var counterY = divId.offsetTop;
			counterY -= divId.scrollTop;
			
			var divIdY = divId;
			while(divIdY.offsetParent)
			{
				counterY += divIdY.offsetParent.offsetTop;
				if (divIdY != document.body)
					counterY -= divIdY.scrollTop;
				divIdY = divIdY.offsetParent;
			}
			return counterY;
			
		},
		
		get : function(element, relativeElement)
		{
			var position = {x:-1, y:-1};
			
			// getting element //
			element = General.$(element);
				
			// no element //
			if (element === null)
				return position;
				
			// getting relative element //
			relativeElement = relativeElement || null;
			relativeElement = General.$(relativeElement);
			
			// who is the relative element // 
			var offsetParentNode = null;
			if (relativeElement === null)
				offsetParentNode = document.body;
			else
				offsetParentNode =  relativeElement;
			
			// calculating position //
			position.x = 0;
			position.y = 0;
			
			var _parent = element;
			while (_parent !== offsetParentNode && _parent !== document.body && _parent !== null)
			{
				position.x += _parent.offsetLeft;	
				position.x -= _parent.scrollLeft;
				position.y += _parent.offsetTop;	
				position.y -= _parent.scrollTop;
				_parent = _parent.offsetParent;
			}
			
			if (relativeElement !== null && (_parent === document.body || _parent === null))
			{
				position.x = -1;
				position.y = -1;
			}
			
			return position;
		},
		
		
		getMax : function(elementArr, positionName, relativeElement)
		{
			positionName = positionName || null;
			relativeElement = relativeElement || null;
			
			if (typeof(elementArr) === 'undefined' || !(elementArr instanceof Array) || !positionName)
				return null;
				
			var l = elementArr.length;
			var result = null;
			var _max = -1;
			
			for (var i=0;i<l;++i)
			{
				result = General.ObjectPosition.get(elementArr[i],relativeElement);
				_object = General.$(elementArr[i]);
				if (_object !== null)
				{
					if (positionName === 'left' && (result.x + _object.offsetLeft) > _max)
						_max = result.x + _object.offsetLeft;
					else if (positionName === 'top' && (result.y + _object.offsetHeight) > _max)
						_max = result.y + _object.offsetHeight;
				}
			}
			
			
			return _max;
		}
	},
	
	/**************************************************
	Data
	**************************************************/
	Data :
	{
		checkString : function(string, type)
		{
			var result = true;
			switch(type)
			{
				case 'email':
					var emailPat =/^[\w-_\&.]+\@[\w-_]+\.+[\w-_.]+$/;
					if ((string.search(/[~!#$%^&*()=`\'\"\\/><?\[\]{}|]/g) !== -1) || (!string.match(emailPat)) || (string === ''))
						result = false;
					break;
				case 'number':
					var numPattern =/^[-]?[0-9]+\.?[0-9]?$/;
					if (!string.match(numPattern))
						result = false;
					break;
			}
			return result;
		}
	}
};

/***********
Calculation page viewable size
***********/
General.calcScreenSize();
/***********
getting user's browser
***********/
General.getBrowser();